如何在python中正确装饰一个类

时间:2012-10-15 20:39:44

标签: python module decorator

我在做这件事时遇到了一些麻烦。目前我有一个模块,里面有一堆类,其中一些类将被装饰以表示一些东西。

我想要的是创建一个只包含装饰类的新假模块。所以像这样:

class FakeModule: pass

def Decorator(cls):
    attr = getattr(RealModule, cls)
    setattr(FakeModule, cls, attr)

有什么建议吗?我是python和python装饰的新手,所以我不确定这样做的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

  

我想要的是创建一个新的假模块,其中只包含装饰类

如果装饰器在类上设置了一些唯一的属性或值,那么您可以从模块中获取所有类并使用inspect模块对其进行过滤:

def is_decorated_class(cls, _sentinel=object()):
    return (inspect.isclass(cls) and 
            getattr(cls, "some_attr", _sentinel) == value)

name_class_pairs = inspect.getmembers(realmodule, is_decorated_class)