访问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,是的,您创建了引用计数(默认垃圾收集策略)无法处理的周期。不过有一个可选的垃圾收集器可以解决这个问题。检查