我想知道为什么人们能够为自定义类型的实例创建一个新属性(“新”意味着“先前未在类主体中定义”),但无法为内置类型执行相同的操作在类型上,比如object
本身。
代码示例:
>>> class SomeClass(object):
... pass
...
>>> sc = SomeClass()
>>> sc.name = "AAA"
>>> sc.name
'AAA'
>>> obj = object()
>>> obj.name = "BBB"
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'object' object has no attribute 'name'
有些对象没有 __dict__ 属性(这是存储所有自定义“新定义”属性的字典)。您可以使用 __slots__ 变量模拟相同的行为(请参阅蟒蛇参考 http://docs.python.org/reference/datamodel.html#__slots__)。当您使用 __dict__ 子类化类时,__slots__ 变量不起作用。因为你总是在子类化object对于新风格的课程,object不能有 __dict__,因为这将导致无法使用 __slots__。没有 __slots__ 的类占用更少的内存,并且速度可能稍快一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)