В такой ситуации у b1 и b2 одинаковые экземпляры A.
class A: def __init__(self): self.var=1 class B: a=A() def __init__(self): pass b1=B() b2=B() b1.a.var=2 #changing "var" in b1 would also change it in b2 print(b2.a.var) # prints 2
Что мне делать, чтобы иметь 2 разных экземпляра A в B?
Если B определено как есть, его атрибут a принадлежит самому классу, а не каждому отдельному экземпляру. Вам нужно сделать что-то вроде этого:
B
a
class B: def __init__(self): self.a = A()
, чтобы получить отдельные экземпляры A для каждого B.
A
Вы инициализируете A() как статическую переменную класса при первом разборе. Чтобы иметь один экземпляр A() на экземпляр B(), он должен быть в __init__ из B()
A()
B()
__init__
class A: def __init__(self): self.var=1 class B: def __init__(self): self.a = A() b1=B() b2=B() b1.a.var=2 # changing "var" in b1 would not change it in b2 print(b2.a.var) # now prints 1
Вы использовали то, что составляет статическую переменную.Попробуйте это:
class A: def __init__(self): self.var = 1 class B: def __init__(self): self.a = A()
Вам нужно инициализировать его отдельно для каждого экземпляра, а не на уровне класса, как сейчас: