【问题标题】:Python - How to call static member using class string?Python - 如何使用类字符串调用静态成员?
【发布时间】:2015-08-21 04:49:00
【问题描述】:

我有一个变量

class_name = "BigClass"

我需要像BigClass.static_data这样访问BigClass类的静态成员

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

【问题讨论】:

标签: python


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多