【发布时间】:2018-02-28 23:48:57
【问题描述】:
我不明白 python 的行为,我有很多相同的错误:
文件“./start.py”,第 20 行,在 print2
item.print2()
RuntimeError: 超出最大递归深度
我的代码如下:
#!/usr/bin/python
class Component:
def print2(self):
pass
class Composite(Component):
items = []
name = 'composite'
def __init__(self, name):
self.name = name
def add(self, item):
self.items.append(item)
def print2(self):
if self.items:
for item in self.items:
item.print2()
else:
print self.name
class Leaf(Component):
name = 'leaf'
def __init__(self, name):
self.name = name
def print2(self):
print self.name
category = Composite('category1')
leaf = Composite('leaf1')
category.add(leaf)
leaf = Leaf('leaf2')
category.add(leaf)
category.print2()
当我在构造函数 (__init__) 中添加 self.items = [] 时,它工作正常。你能解释一下这种行为吗?
【问题讨论】:
-
因为你所有的对象都共享
items...这是一个类变量,即“静态” -
__init__外的元素是属于类的静态元素,__init__内的元素是对象的成员,它们不属于类。这意味着每次调用print2(),无论对象是什么,self.items都包含 2 个 Composite。