Различные экземпляры A в B (Python) - PullRequest
1 голос
/ 18 июля 2011

В такой ситуации у 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?

Ответы [ 4 ]

6 голосов
/ 18 июля 2011

Если B определено как есть, его атрибут a принадлежит самому классу, а не каждому отдельному экземпляру. Вам нужно сделать что-то вроде этого:

class B:
    def __init__(self):
        self.a = A()

, чтобы получить отдельные экземпляры A для каждого B.

2 голосов
/ 18 июля 2011

Вы инициализируете A() как статическую переменную класса при первом разборе. Чтобы иметь один экземпляр A() на экземпляр B(), он должен быть в __init__ из B()

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
2 голосов
/ 18 июля 2011

Вы использовали то, что составляет статическую переменную.Попробуйте это:

class A:
    def __init__(self):
        self.var = 1

class B:
    def __init__(self):
        self.a = A()
2 голосов
/ 18 июля 2011

Вам нужно инициализировать его отдельно для каждого экземпляра, а не на уровне класса, как сейчас:

class B:
    def __init__(self):
        self.a = A()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...