让实例知道包含i的实例

2024-04-23 06:49:37 发布

您现在位置:Python中文网/ 问答频道 /正文

class Bar:
    def __init__(self):
        pass


class Foo:
    def __init__(self):
        self.items = [Bar(), Bar(), Bar()]

a = Foo()

在本例中,Foo具有一个属性items,该属性包含Bar的实例

在Python3.5中,如何执行以下操作:

class Bar:
    def __init__(self):
        print(container.baz)

其中container.baz是指包含它的Foo实例中的属性baz


背景

我试图创建这样的东西,每个Bar都有一个id属性,由idGenerator()半随机生成。ID的一部分是属于Bar实例的Foo.items的索引,ID是从Bar内生成的。我希望这能把事情弄清楚


Tags: 实例selfid属性fooinitcontainerdef
1条回答
网友
1楼 · 发布于 2024-04-23 06:49:37

只需将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()实例的引用),或者作为Bar()中需要的其他内容来完成它的工作

相关问题 更多 >