我遇到thrift代码生成器或python的问题。
代码示例(由thrift生成):
class SomeClass:
spec = (
(1, (SomeClass, SomeClass.spec)),
)
错误讯息:
NameError: name 'SomeClass' is not defined
所以我在节俭jira中找到bug(自2014年以来仍然开放)。建议的解决方案非常糟糕。
我可以以某种方式避免这个问题吗?
在* .thrift或* .py文件中的最佳案例解决方案中,可以在手动生成之前或之后更改。
答案 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生成的代码进行了比较。
如果有人会使用我的解决方案,请不要忘记更改生成的方法,那就检查,当你的规格!=无