其中是为类“object”定义的“\uu del\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

2024-04-16 19:48:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在逐字阅读python官方文档。你知道吗

在3.3中。特殊方法名3.3.1. Basic customization

它确实在object基本定制下指定了16个特殊方法,我收集它们如下:

In [47]: bc =['__new__', '__init__', '__del__', '__repr__', '__str__', '__bytes__', 
'__format__', '__eq__', '__le__', '__lt__', '__eq__', 
'__ne__', '__ge__', '__gt__', '__hash__', '__bool__']
In [48]: len(bc)
Out[48]: 16

问题是其中有三个不是object的有效属性

In [50]: for attr in bc:
    ...:     if hasattr(object,attr):
    ...:         pass
    ...:     else:
    ...:         print(attr)
    ...:
__del__
__bytes__
__bool__

对象是所有类的基。2. Built-in Functions — Python 3.6.3 documentation

它没有递归基类。你知道吗

为类“object”定义的__del____bytes____bool__方法在哪里?你知道吗


Tags: 方法in文档newbytes官方objectbasic
2条回答

Where are methods of __del__, __bytes__, __bool__ defined for class 'object'?

它们没有在object上定义。这些是可以在类上实现的特殊方法。你知道吗

误解可能是因为文档中说了object.__bool__,但是那里的object.仅仅意味着它是对象上的一个方法(在“实例”的意义上)如果实现了。 同样,文档页面后面的示例也列出了使用class.__subclasscheck__的元类的特殊方法。这并不意味着它总是被实现的,更像是如果实现了,它在类中是可用的。你知道吗

__del__对于object绝对不能存在-它在类中的存在改变了垃圾收集器处理其实例的方式,因此在object上使用此方法将使任何类都不可能没有它。你知道吗

__bool__仅当您希望重写在布尔上下文中将对象视为真实对象的默认行为时才需要。object不需要重写该行为。你知道吗

我不确定__bytes__是怎么回事,我认为如果不存在(或类似的东西),它会默认为__str__。你知道吗

相关问题 更多 >