Передача себя в конструктор в Python - PullRequest
10 голосов
/ 16 октября 2010

Недавно я работал над небольшим проектом на Python и попал в ситуацию, когда я хотел передать self в конструктор другого объекта. Я не уверен почему, но мне пришлось посмотреть, было ли это законно в python. Я делал это много раз в C ++ и Java, но я не помню, чтобы мне приходилось делать это с python.

Является ли передача ссылок на self новым объектам чем-то, что не считается питоническим ? Я не думаю, что видел какие-либо программы на python, явно передающие собственные ссылки. Неужели до сих пор я не нуждался в этом? Или я борюсь с питоном?

Ответы [ 2 ]

14 голосов
/ 16 октября 2010

Да, это законно, и да, это питон.

Я использую этот шаблон, когда у вас есть объект и контейнерный объект, в котором содержащиеся объекты должны знать об их родителе.

3 голосов
/ 16 октября 2010

Просто передайте его как параметр.Конечно, он не будет вызываться self в другом инициализаторе ...

class A:
    def __init__(self, num, target):
        self.num = num
        self.target = target

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

a = A(1)
b = B(2)
print b.a.num # prints 2
...