创建一个名为“ def”的方法

时间:2019-09-23 20:43:44

标签: python python-3.x

python中是否有一种方法可以覆盖def的定义?

尝试创建一个名为def的方法,如下所示:

MyObject.def(arguments)

2 个答案:

答案 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是保留关键字。虽然您可以使用类名称空间是带有字符串键的字典这一事实,但请不要这样做。