Kod
class MyClass:
Property1 = 1
tworzy klasę MyClass
który ma dict:
>>> MyClass.__dict__
{'Property1': 1, '__doc__': None, '__module__': '__main__'}
zauważy parę klucz-wartość 'Property1': 1
. Po wypowiedzeniu MyClass.Property1
, Python sprawdza w dyktafonie MyClass.__dict__
klucz Property1
i jeśli go znajdzie, zwraca powiązaną wartość 1
.
>>> MyClass.Property1
1
Po utworzeniu instancji klasy,
>>> mc = MyClass()
dict dla instancji jest tworzona również:
>>> mc.__dict__
{}
Wskazówka ten dict jest pusty. Kiedy mówisz mc.Property1
, Python najpierw szuka w mc.__dict__
dla klucza 'Property1'
. Ponieważ jej tam nie ma, wygląda to w dyktafonie klasy mc
, czyli MyClass.__dict__
.
>>> mc.Property1
1
Zauważ, że jest znacznie więcej do historii Python attribute access. (Nie wspomniałem na przykład o ważnych zasadach dotyczących deskryptorów.) Ale powyższe zawiera zasadę dla większości typowych przypadków dostępu do atrybutów.
Bo tak działają zmienne klasy? – SilentGhost
@SilentGhost: Tak, zmienne klasy Python działają w ten sposób, ale to zachowanie nie jest wymagane i nie jestem w stanie znaleźć dla niego wyjaśnienia. – Philipp