我有一个变量
class_name = "BigClass"
我需要访问BigClass
BigClass.static_data
个静态成员
我可以以某种方式将变量class_name
内的字符串转换为实际的类并在Python中访问其静态成员吗?
答案 0 :(得分:3)
class BigClass:
static_data = 42
def foo(self):
return "frog"
bc = eval("BigClass" + "()")
print bc.foo()
print bc.static_data
如果您只想访问静态数据,则可以删除"()"来自评估电话。
另一种方法是使用类装饰器在查找表(字典)中注册该类,并提供lookup_class函数。我更喜欢第二种方法,eval可能很危险。
_cls_lookup = {}
def register_cls(cls):
_cls_lookup[cls.__name__] = cls
return cls
def lookup_cls(cls_name):
return _cls_lookup[cls_name]
@register_cls
class BigClass:
static_data = 42
bc = lookup_cls("BigClass")
print bc.static_data