【发布时间】:2015-08-21 04:49:00
【问题描述】:
我有一个变量
class_name = "BigClass"
我需要像BigClass.static_data这样访问BigClass类的静态成员
我能否以某种方式将变量 class_name 中的字符串转换为实际的类并在 Python 中访问其静态成员?
【问题讨论】:
标签: python
我有一个变量
class_name = "BigClass"
我需要像BigClass.static_data这样访问BigClass类的静态成员
我能否以某种方式将变量 class_name 中的字符串转换为实际的类并在 Python 中访问其静态成员?
【问题讨论】:
标签: python
class BigClass:
static_data = 42
def foo(self):
return "frog"
bc = eval("BigClass" + "()")
print bc.foo()
print bc.static_data
如果您只想访问静态数据,则可以从 eval 调用中删除“()”。
另一种方法是使用类装饰器将类注册到查找表(字典)中并提供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
【讨论】: