class Bar:
def __init__(self):
pass
class Foo:
def __init__(self):
self.items = [Bar(), Bar(), Bar()]
a = Foo()
在此示例中,Foo
的属性items
包含Bar
的实例。
在Python 3.5中,我该怎么做:
class Bar:
def __init__(self):
print(container.baz)
其中container.baz
引用包含它的baz
实例中的属性Foo
。
背景
我正在尝试创建一些内容,其中每个Bar
都有一个id
属性,由idGenerator()
半随机生成。部分ID是属于Foo.items
实例的Bar
索引,ID是从Bar
内生成的。我希望能够解决问题。
答案 0 :(得分:3)
只需将self
传递给Bar()
,然后完成:
class Bar:
def __init__(self, parent):
self.id = generate_id(self, parent)
class Foo:
def __init__(self):
self.items = [Bar(self), Bar(self), Bar(self)]
如果您可以传递self
以外的更具体的信息,请执行此操作。
Python对象对它们的引用加载一直在创建和删除。在您的示例中,列表中包含三个类的实例,该列表是从Foo
的实例引用的。但是会有其他参考。像a.items[0]
和Python堆栈一样,在它的生命周期中。 Python没有本地工具可以让你发现对象存在哪些引用,因为它非常,非常,非常快速地无用,不断变化和过时。
只需显式,并传递您需要的信息,可以是self
(因此对Foo()
实例的引用),或者您需要的其他内容{ {1}}做它的工作。