Python:递归结构

时间:2016-07-22 11:09:19

标签: python recursion structure thrift

我遇到thrift代码生成器或python的问题。

代码示例(由thrift生成):

class SomeClass:
    spec = (
            (1, (SomeClass, SomeClass.spec)),
    )

错误讯息:

NameError: name 'SomeClass' is not defined

所以我在节俭jira中找到bug(自2014年以来仍然开放)。建议的解决方案非常糟糕。

我可以以某种方式避免这个问题吗?

在* .thrift或* .py文件中的最佳案例解决方案中,可以在手动生成之前或之后更改。

2 个答案:

答案 0 :(得分:1)

尝试使用以下代码片段替换代码,注意:它使用列表而不是元组,因为元组是不可变的。

class SomeClass:
    spec = None
    @classmethod
    def init(cls):
        cls.spec = []
        cls.spec.append( [ 1 , (cls, cls.spec) ] )

SomeClass.init()

print( SomeClass.spec )       # [[1, (<class SomeClass>, [...])]]

没有类方法的另一种解决方案

class SomeClass:
    spec = None

SomeClass.spec = []
SomeClass.spec.append( [ 1 , (SomeClass, SomeClass.spec) ] )

print( SomeClass.spec )       # [[1, (<class SomeClass>, [...])]]

答案 1 :(得分:0)

好像,那就是python的genered代码包含无用的字段

SomeClass.spec

所以我只是删除它。

我将其与java生成的代码进行了比较。

如果有人会使用我的解决方案,请不要忘记更改生成的方法,那就检查,当你的规格!=无