Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问Python中引用实例的实例_Python - Fatal编程技术网

访问Python中引用实例的实例

访问Python中引用实例的实例,python,Python,我想要的东西可能有一个名字,也许最好通过一个例子来说明。假设我有这些课程: class MonkeyCage(object): def __init__(self, dimensions, monkeys=None): self.dimensions = dimensions self.monkeys = monkeys def add_monkey(self, monkey): self.monkeys.append(monke

我想要的东西可能有一个名字,也许最好通过一个例子来说明。假设我有这些课程:

class MonkeyCage(object):
    def __init__(self, dimensions, monkeys=None):
        self.dimensions = dimensions
        self.monkeys = monkeys

    def add_monkey(self, monkey):
        self.monkeys.append(monkey)


class Monkey(object):
    def __init__(self, name):
        self.name = name
假设我创建了一个动物园,有一个猴子笼子和第一只猴子:

>>> dimensions = {'width': 100, 'height': 200, 'depth': 70}
>>> cage = MonkeyCage(dimensions) 
>>> monkey = Monkey("LaundroMat")
并将猴子添加到MonkeyCage:

>>> cage.add_monkey(monkey)

是否有一种方法——通过monkey实例——获得添加monkey的笼子的尺寸?

您必须以某种方式将父对象传递给monkey。例如,在add_monkey中,您可以设置set monkey.parent=self并以这种方式访问它。

monkey添加到
框架时,只需给它一个标签即可

class MonkeyCage(object):
    def __init__(self, dimensions, monkeys=None):
        self.dimensions = dimensions
        self.monkeys = monkeys

    def add_monkey(self, monkey):
        monkey.cage_dimension = self.dimensions
        self.monkeys.append(monkey)


class Monkey(object):
    def __init__(self, name):
        self.name = name

然后,您可以通过
monkey.cage\u dimensions

获得有关
cage
的信息。正如您所建议的,这种实体关系(一对多)非常常见。通常使用外键将猴子链接到笼子。它在RDBMS(关系数据库系统)中用于链接对象实例(由表中的行表示,表中的行又表示对象类。您将有一个用于Monkey的表和一个用于Cage的表)。我经常使用ORM,并且确实想知道是否可以使用与外键类似的概念:)类实例相互引用(内存或其他)是否存在任何危险。@LaundroMat,是的,您创建了引用计数(默认垃圾收集策略)无法处理的周期。不过有一个可选的垃圾收集器可以解决这个问题。检查