我试图找出某些对象属性如何引用另一个对象的属性。例如,我有一个名为" 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.
答案 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的其他解决方案。这是最明显的一个。