В приведенном ниже примере суперкласс имеет атрибут __dict__
, тогда как подкласс не имеет его.Подкласс Python не имеет __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>
1: Замечания по вышеуказанным шоу, где ДИКТ присутствует. почему у суперкласса есть это, но не подкласса.
, пытаясь найти ответ на этот вопрос, я наткнулся на это 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
бросков AttributeError
но из A
имеет пустой Dict.
Что говорят 'dir (Super)' и 'dir (Sub)' say? – SethMMorton
оба, похоже, имеют '__dict__' с вызовом dir() –
Вот [некоторая информация] (http://stackoverflow.com/questions/4877290/what-is-the-dict-dict-attribute-of-a-python- класс) о '__dict __ ['__ dict __']', но он не дает понять, почему это не в подклассе. – hunse