为什么自定义类型接受Python中的ad-hoc属性(而内置函数不接受)?

Chu*_*uim 10 python attributes datamodel custom-type

我想知道为什么一个人能够为自定义类型的实例创建一个新属性("new"表示"以前没有在类体中定义"),但是对于一个自定义类型的实例,它不能做同样的事情.在类型中,像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'
Run Code Online (Sandbox Code Playgroud)

ond*_*dra 6

某些对象没有__dict__属性(这是一个存储所有自定义"新定义"属性的字典).您可以使用__slots__变量模拟相同的行为(请参阅python参考).当您使用__dict__对类进行子类化时,__slots__变量无效.而当你总是在继承对象的新式类的对象一定不能有__dict__,因为这将使其无法使用__slots__.没有__slots__的类占用的内存较少,可能会稍快一些.