python中的递归类和thri中的一个bug

2024-06-28 15:55:33 发布

您现在位置:Python中文网/ 问答频道 /正文

Thrift 0.9.2现在允许递归结构包含自身的实例。例如这个节俭的定义:

namespace py foo

struct Foo {
    1: optional string member
    2: optional Foo fooData
}

生成以下代码:

^{pr2}$

此代码的问题在于类变量thrift_spec

thrift_spec = (
    None, # 0
    (1, TType.STRING, 'member', None, None, ), # 1
    (2, TType.STRUCT, 'fooData', (Foo, Foo.thrift_spec), None, ), # 2
  )

这里有两个问题:

  1. 类def尝试在完全定义Foo之前引用它(并在实例化时生成NameError: name 'Foo' is not defined)。在
  2. thrift_spec试图包含对自身的引用,这在python(自引用元组?)。在

这个元组由thrift中名为fastbinary的包使用,fastbinary是一个本机序列化和反序列化thrift对象的C模块。元组用于将类型信息传递给C-module。在

我的问题是如何最好地解决这两个问题。对于#1,我可以将thrift_spec的实例化移到类定义之后,也可以将其移到@property中。我真的不知道该怎么办。有什么方法可以获得对tuple对象的引用并将其传递给C-module吗?在

请注意,这是thrift中的一个开放错误,我希望帮助解决: https://issues.apache.org/jira/browse/THRIFT-2642


Tags: 对象实例代码none序列化定义foothrift