Мне было интересно, что было наилучшей практикой для инициализации атрибутов объектов в Python, в теле класса или внутри функции __init__
?Инициализация/объявление атрибутов в классе Python: куда их поместить?
т.е.
class A(object):
foo = None
против
class A(object):
def __init__(self):
self.foo = None
имеет смысл, я думал, что они ограничены экземпляром в обоих случаях ... спасибо :) – fortran
Python имеет сложный набор [правил поиска атрибутов] (http://www.cafepy.com/article/python_attributes_and_methods/ python_attributes_and_methods.html). Не вдаваясь в дескрипторы, для этого случая достаточно знать, что 'a .__ dict__' сначала ищет ключ' foo', и если он там не найден, выполняется поиск 'A .__ dict__'. Вот почему вы можете использовать 'a.foo', даже если' foo' является атрибутом класса. – unutbu
Также следует отметить, что для атрибутов класса, если бы вы выполняли 'a.foo = whatever', вы фактически создали бы новый атрибут экземпляра (который скрывает атрибут класса). 'A.foo' не изменится. Это своего рода получение, так как вы можете получить доступ к значению 'A.foo' с помощью' a.foo', но при назначении ему будет создан новый атрибут экземпляра. – Kat