我想定义自己的树状类。我写过这样的代码:
class forest:
class tree:
def __init__(self):
self.var_a = []
self.var_b = []
#Or something as simple
def mk(self,something):
#Some instructions
self.a = tree()
b_var = self.a.mk(a_var)
self.b = tree()
c_var = self.a.mk(b_var)
#Some instructions
return ret
#Some code for class forest
嗯
tree()
不起作用。NameError: global name 'tree' is not defined
self.tree()
的错误:AttributeError: 'tree' object has no attribute 'tree'
我不知道在这种情况下如何(或是否)使用
self.__init__
或self.__new__
。问题
在Python3中可以使用递归类吗?这个代码看起来怎么样?
最佳答案
为了实现container pattern,不需要嵌套类。
将树类移到林外。
每次树被实例化时,它都可以将自己添加到林中:
class Forest:
def __init__(self):
self.mytrees = []
def add(self, tree):
self.mytrees.append(self)
def drop_leaves(self):
for tree in self.mytrees:
tree.drop_leaves()
class Tree:
def __init__(self, forest):
forest.add(self)
self.var_a = []
self.var_b = []
#Or something as simple
def drop_leaves(self):
print 'Drop'
sherwood = Forest()
t1 = Tree(sherwood)
t2 = Tree(sherwood)
sherwood.drop_leaves()
问题是:
在Python3中可以使用递归类吗?代码如何
因为这看起来像?
直截了当的回答:
嵌套类定义在Python中没有任何好处,因为它们的作用域没有嵌套(内部类的内容不能直接引用封闭类)。
因此,Python中通常的模式是创建两个以上的类,而不是直接相互引用(使用组合而不是继承)。
后续评论:
好。我不需要上课。功能与词典
就够了。
函数和字典总是足够的(Python的早期版本没有类)。Oto,我们发现类是组织代码的一种方便方法,它清楚地说明了哪些函数操作哪些数据。你怎么做取决于品味。
稍后的评论:
嵌套类有一个好处。它的定义并不存在于
全球范围。
这也可能是一个缺点,使得重用代码更加困难,测试更加困难,而且可能会混淆内省工具。
关于python - Python3和递归类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8370472/