我正在编写一些使用后端服务的客户端代码来获取它使用的一些类型。
某些类型将使用代码中的Enum
来表示。但是,这些枚举在初始化之前会被导入到文件中。
这是一个类似于我的代码的例子:
types.py
EnumA = None
EnumB = None
update_types():
global EnumA
global EnumB
backend_types = get_backend_types(...)
EnumA = Enum("A", backend_types["A"])
EnumB = Enum("B", backend_types["B"])
client.py
from types import EnumA, EnumB, update_types
class Client:
def setup(...):
update_types()
def some_method():
# uses the enums here
a = EnumA(1)
Client.setup()
很早就被召唤,但还不够早。
问题在于,当我执行some_method
时,EnumA
仍然是None
而不是从后端初始化。
在some_method
中添加本地导入可以解决这个问题,但我想找到更通用的解决方案。
答案 0 :(得分:0)
您有两个选择:
import types
...
a = types.EnumA(1)
get_backend_types()
和Enum
创建的调用移至模块级别,而不是将它们隐藏在函数中: from enum import Enum
...
backend_types = get_backend_types(...)
EnumA = Enum("A", backend_types["A"])
EnumB = Enum("B", backend_types["B"])