python中是否有一种方法可以覆盖def的定义?
尝试创建一个名为def
的方法,如下所示:
MyObject.def(arguments)
答案 0 :(得分:1)
不可能。 # script.py
import binascii
def encode_binary(input, encoding):
return bin(int.from_bytes(input.encode(encoding), 'big'))
print(encode_binary('A', 'utf8'))
print(encode_binary('A', 'latin1'))
print(encode_binary('A', 'ascii'))
print() # print a newline
print(encode_binary('¡', 'utf8'))
print(encode_binary('¡', 'latin1'))
print(encode_binary('¡', 'ascii'))
--------
$ python script.py
0b1000001
0b1000001
0b1000001
0b1100001010100001
0b10100001
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\u00a1' in position 0: ordinal not in range(128)
是keyword,因此不能被覆盖(不同于def
这样的内置对象)。取而代之的是在行尾添加下划线:
max
尽管更好的解决方案可能是扩展名称:class MyObject:
def def_():
pass
答案 1 :(得分:0)
您可以执行以下操作:
class A:
def x(self):
print('hi')
x.__name__ = 'def'
setattr(A, 'def', A.x)
delattr(A, 'x')
您将无法从字面上调用该方法:
>>> A().def()
...
A().def()
^
SyntaxError: invalid syntax
但是以下方法会起作用:
>>> getattr(A(), 'def')()
'hi'
这是一个糟糕的主意。 def
是保留关键字。虽然您可以使用类名称空间是带有字符串键的字典这一事实,但请不要这样做。