Python - 如何使用类字符串调用静态成员?

时间:2015-08-21 04:49:01

标签: python

我有一个变量

class_name = "BigClass"

我需要访问BigClass

这样的BigClass.static_data个静态成员

我可以以某种方式将变量class_name内的字符串转换为实际的类并在Python中访问其静态成员吗​​?

1 个答案:

答案 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