我想定义自己的树状类。我写过这样的代码:

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/

10-15 02:24