在此代码:Python 2.7版:奇怪的构造函数的行为:改变错误的领域
# 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
为什么?
Lol,3年的自学Python,bilion代码行和你破坏了我的基本知识:D – WBAR 2013-02-21 15:35:28
对不起;如果你使用过其他语言,这并不是非常明显,但它是有意义的(班级属性定义级别)。 – 2013-02-21 21:01:10