在python中节约使用子命名空间
我知道每个旧文件都应该定义一个新的名称空间。但我不确定子名称空间是什么,特别是python代码生成如何处理它们 为了说明我的混淆点,我将给出一个简单的例子 假设我们在在python中节约使用子命名空间,python,namespaces,thrift,Python,Namespaces,Thrift,我知道每个旧文件都应该定义一个新的名称空间。但我不确定子名称空间是什么,特别是python代码生成如何处理它们 为了说明我的混淆点,我将给出一个简单的例子 假设我们在示例中有下面的节俭定义。节俭 namespace py schema include "service.thrift" union KeyQuality { 1: service.QA service_qa } struct Key { 1: required KeyId id 2: required
示例中有下面的节俭定义。节俭
namespace py schema
include "service.thrift"
union KeyQuality {
1: service.QA service_qa
}
struct Key {
1: required KeyId id
2: required KeyQuality quality
}
在另一个文件service.thift
中
namespace py schema.service
struct QA {
1: required string YES_NO
}
现在,如果我使用thrift-r--gen py example.thrift
生成python代码,我将得到一个名为schema
的python包,其中另一个包名为service
(这太棒了),但是schema.ttypes
将尝试导入名为schema.service
的包,它将失败
看起来,thrift
正在处理名称空间层次结构,因为它将服务
包放在模式
下,但在导入包时,它做得不好
如果我将第二个文件的命名空间定义为service
,而不是schema.service
,则将在与包schema
相同的级别上创建一个单独的包,导入将再次失败,因为schema.ttypes
将尝试导入service
我觉得必须安装两个不同的独立软件包才能工作是没有意义的,但这似乎是thrift给我指出的方向。你认为那是最好的解决方法吗?我发现解决方法非常简单。在名称空间前面加上包名并让名称空间遵循包层次结构可以解决这个问题,因为这样所有的东西都在正确的位置,模块从根包开始正确地相互引用。我发现解决方案非常简单。在名称空间前面加上包名并使名称空间遵循包层次结构可以解决这个问题,因为这样一来,所有东西都在正确的位置,模块从根包开始正确地相互引用。这一点很好。我建议也要考虑这个问题。好点。我建议在这个问题上也考虑一下这个问题。