Zastanawiam się, jaka była najlepsza praktyka inicjowania atrybutów obiektów w Pythonie, w ciele klasy lub wewnątrz funkcji __init__
?Inicjalizacja/deklaracja atrybutów w klasie Pythona: gdzie je umieścić?
tj
class A(object):
foo = None
vs
class A(object):
def __init__(self):
self.foo = None
ma sens, myślałem, że są one ograniczone do wystąpienia w obu przypadkach ... dzięki :) – fortran
Python ma skomplikowany zestaw [reguł wyszukiwania atrybutów] (http://www.cafepy.com/article/python_attributes_and_methods/ python_attributes_and_methods.html). Bez wchodzenia w deskryptory, w tym przypadku wystarczy wiedzieć, że 'a .__ dict__' jest najpierw wyszukiwany jako klucz' foo', a jeśli go tam nie ma, to przeszukiwany jest 'A .__ dict__'. Dlatego możesz użyć 'a.foo', nawet jeśli' foo' jest atrybutem klasy. – unutbu
Warto również zauważyć, że jeśli chodzi o atrybuty klas, jeśli robisz "a.foo = cokolwiek", to w efekcie powstanie nowy atrybut instancji (który ukrywa atrybut klasy). 'A.foo' pozostanie niezmienione. To trochę kłopotliwe, ponieważ możesz uzyskać dostęp do wartości 'A.foo' za pomocą' a.foo', ale przypisanie do niej spowoduje utworzenie nowego atrybutu instancji. – Kat