来自https://stackoverflow.com/a/44880260
object()
不支持实例属性,因为它是所有自定义Python类的基础,必须support not having a__dict__
attribute when defining slots instead。
“它是所有自定义Python类的基础”中的“it”是否意味着类object
或其实例object()
?我想上课object
?
由于它是object
而不是object()
,它是所有自定义Python类的基础,它是object
而不是object()
,它必须支持某些实例在定义__dict__
的类时,自定义Python类没有__slots__
属性?
那么我怎么理解object()
没有__dict__
来支持定义__dict__
的类时没有__slots__
属性的一些自定义Python类的实例?
感谢。
答案 0 :(得分:2)
从没有
__slots__
的类继承时,该类的__dict__
属性将始终可访问,因此子类中的__slots__
定义毫无意义。
措辞有点不精确;从技术上讲,由于所有类都继承自object
(缺少__slots__
),这意味着实例都会有__dict__
,但他们真正想说的是{{1}在继承树的每个级别的实例上都没有被抑制(因为没有为__dict__
提供内置类型__dict__
,或者在用户定义的类上用object
抑制它然后,对于树中第一个类的实例,__slots__
将无法取消__dict__
,并且对于它的所有子类,即使它们尝试使用__dict__
来抑制{ {1}}。
基本上,如果__slots__
个实例有__dict__
,那么所有类的所有实例都会拥有它;通过在object
上取消它,__dict__
的子类(读取:所有类)将选项保留为object
。
答案 1 :(得分:1)
是的,您的理解是正确的。 object
的子类可能不希望它们的实例有__dict__
,但如果object
个实例有一个,它们的子类实例也会有一个。
问题主要在于object
是Python中所有其他类的父类。如果它的设计使其实例具有__dict__
,那么__dict__
将由所有类的所有实例继承。