来自不同对象的属性如何相互引用

时间:2016-05-24 18:27:53

标签: python

我试图找出某些对象属性如何引用另一个对象的属性。例如,我有一个名为" A"和孩子[" B"," C"]。我还有孩子B的名字" B"和孩子[" D"," E"]。现在我希望这些具有父属性。有没有办法让B和C自动知道他们的父属性是A ...而D和E知道它的B.见下文:

class FamilyTree:
    def __init__(self, name, children, parent):
        self.name = name 
        self.child = child

我不想下次做:

self.parent = parent

我希望B知道它的父属性是A.

2 个答案:

答案 0 :(得分:0)

必须在某处明确设置父级。如果您不想在孩子中设置它,您可以这样做:

class FamilyTree:
    def __init__(self, name, children):
        self.name = name 
        self.children = children
        for child in children:
            child.parent = self

答案 1 :(得分:0)

你可以这样做,但是,首先,你应该跟踪实例并创建额外的存储空间,其次,你的孩子的名字应该是唯一的(如果他们的孩子名字都是唯一的......如果他们都是' Dad_1' Dad_2& #39;儿子名叫约翰'你怎么知道他的约翰是谁?当然,在创建子实例之前,父实例应该存在。

class FamilyTree(object):
    instances = []

    def __init__(self, name, children=None):
        self.name = name 
        self.child = children
        for inst in FamilyTree.instances: # Dad finder
            if inst.child:
                if self.name in inst.child:
                    self.parent = inst.name
        FamilyTree.instances.append(self) # Add instance to storage

dad = FamilyTree('Dad', ['Son', 'Daughter'])
son = FamilyTree('Son', ['Son_of_Son', 'Daughter_of_Son'])
son.parent

Out[297]: 'Dad'

可以使用装饰器或MetaCalsses的其他解决方案。这是最明显的一个。