このコードでは:
# coding=utf-8
def print_tree(node, tree=0):
print(u"|---" * tree + u"-> %s" % node)
for kid in node.children:
print_tree(kid, tree + 1)
class Person(object):
parent = None
first_name = None
last_name = None
children = []
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
def __init__(self, first_name, last_name, parent=None):
if parent is not None:
if not isinstance(parent, Person):
raise AttributeError('`parent` is not `Person` type!')
self.parent = parent
self.parent.children.append(self)
self.first_name = first_name
self.last_name = last_name
#self.children = []
root = Person('Alan', 'Smith')
p1 = Person('Barbara', 'Smith', root)
p2 = Person('Basia', 'Smith', root)
p3 = Person('Bary', 'Smith', root)
print_tree(root)
例からコメントを削除すると正常に#self.children = []
動作します。しかし、なぜこの行を追加する必要があるのか わかりません。
self.parent.children.append(self)
デバッガーで、行が追加されることself
も発見しましたself.children
なんで ?