У меня есть класс Python, у которого атрибут класса установлен в значение, отличное от None
. При создании нового экземпляра изменения, внесенные в этот атрибут, сохраняются во всех экземплярах.
Вот некоторый код, чтобы понять это:
class Foo(object):
a = []
b = 2
foo = Foo()
foo.a.append('item')
foo.b = 5
Использование foo.a
возвращает ['item']
и foo.b
возвращает 5
, как и следовало ожидать.
Когда я создаю новый экземпляр (назовем его bar
), использование bar.a
возвращает ['item']
, а bar.b
возвращает 5
тоже! Однако, когда я первоначально установил все атрибуты класса в None
, затем установил их в __init__
, например, так:
class Foo(object):
a = None
b = None
def __init__(self):
self.a = []
self.b = 2
Использование bar.a
возвращает []
и bar.b
возвращает 2
, а foo.a
возвращает ['item']
и foo.b
возвращает 5
.
Это как предположим, работать? Я очевидно никогда не сталкивался с этой проблемой в течение 3 лет, я программировал Python и хотел бы получить некоторые разъяснения. Я также не могу найти его где-нибудь в документации, поэтому, если возможно, дать мне ссылку было бы замечательно. :)