我在做这件事时遇到了一些麻烦。目前我有一个模块,里面有一堆类,其中一些类将被装饰以表示一些东西。
我想要的是创建一个只包含装饰类的新假模块。所以像这样:
class FakeModule: pass
def Decorator(cls):
attr = getattr(RealModule, cls)
setattr(FakeModule, cls, attr)
有什么建议吗?我是python和python装饰的新手,所以我不确定这样做的正确方法是什么。
答案 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)