子ノードと孫ノードを持つノードインスタンスでメソッドをチェーンできるようにしたい。その最上位ノードでメソッドを呼び出すとき、そのオブジェクトの子と孫を返すことができるようにしたいと思います。また、一番上のノードからそれらの子と孫の属性を取得できるようにしたいと思います。私は次のデータモデルを持っています:
class GrandParent(object):
def __init__(self,name='',age=0,is_retired=True,children=[]):
self.name = name
self.age = age
self.is_retired = is_retired
if children:
self.children = children
def print_mychildren(self):
for child in self.children:
print "Child: ",child
def mychildren(self):
return self.children
def __str__(self):
return "name: %s age: %s is_retired:%s" %(self.name,self.age,self.is_retired)
class Parent(object):
def __init__(self,name='',age=0,has_mortgage=True,children=[]):
self.name = name
self.age = age
self.has_mortgage = has_mortgage
if children:
self.children = children
def print_mychildren(self):
for child in self.children:
print "Child: ",child
def __str__(self):
return "name: %s age: %s has_mortgage: %s" %(self.name,self.age,self.has_mortgage)
class Child(object):
def __init__(self,name='',age=0,has_toys=True):
self.name = name
self.age = age
self.has_toys = has_toys
def __str__(self):
return "name: %s age: %s has_toys:%s" %(self.name,self.age,self.has_toys)
if __name__ == '__main__':
beaver = Child('Beaver',12,True)
ward = Child('Ward',16,False)
june = Parent('June',38,True,[beaver,ward])
grandpa = GrandParent('Grandpa',61,True,[june])
print grandpa
grandpa.print_mychildren() # print June
# Doesn't work
grandpa.mychildren().print_mychildren() # I want it to print Ward and Beaver
# Doesn't work
print grandpa.mychildren().mychild('Beaver').age # I want it to return an age
has_mortgageやis_retiredなどの各クラスに異なる属性を与えたいので、GrandParent、Parent、Childクラスを別々に保ちたいことに注意してください。
上記のデータモデルから、最上位ノードの子をトラバースするようにメソッドをチェーンできるようにしたいと思います。次のようになります。
grandpa.children # returns a list of children
print grandpa.mychild('June').has_mortgage # returns the value
grandpa.mychildren().mychildren() # prints a list of grandchildren
print grandpa.mychildren().mychild('Ward').has_toys # return the value
言い換えれば、私は次のような声明を出すことができますか?
print grandpa.mychildren().mychildren()
次のように動作します:
for child in grandpa.children:
for grandchild in child.children:
print grandchild
これに対するあなたの答えをいただければ幸いです。ありがとうございました。
イリノイ州ポール
シカゴ