Python子类没有__dict__而超类有?

时间:2013-11-18 19:47:54

标签: python class dictionary attributes built-in

在下面的示例中,超类具有__dict__属性,而子类没有该属性。

>>> class Super(object):
...     def hello(self):
...        self.data1="hello"
... 
>>> 
>>> class Sub(Super):
...     def hola(self):
...        self.data2="hola"
... 
>>> 
>>> Super.__dict__
<dictproxy object at 0x108794868>
>>> Super.__dict__.keys()
['__dict__', '__module__', '__weakref__', 'hello', '__doc__'] # note __dict__
>>> Sub.__dict__.keys()
['__module__', '__doc__', 'hola']   #__dict__ absent here
>>> Sub.__dict__
<dictproxy object at 0x108794868>

Q1:以上评论显示 dict 存在的位置。为什么超类有它而不是sublcass。

在试图找到答案的同时,我遇到了这个post.,这使我更加困惑。

>>> class Foo(object):
...    __slots__ = ('bar',)
...    bar="spam"
... 
>>> f = Foo()
>>> f.__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__dict__'
>>> class A(object):
...    pass
... 
>>> b = A()
>>> b.__dict__
{}

Q2:为什么instance Foo引发AttributeErrorA的{​​{1}}为空。

1 个答案:

答案 0 :(得分:0)

广告位的类没有 dict 。这里'bar'和插槽之间存在冲突。删除'bar',它会正常工作。