0

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

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

class FakeModule: pass

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

有什么建议么?我对 python 和 python 装饰器很陌生,所以我不太确定这样做的正确方法是什么。

4

1 回答 1

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)
于 2012-10-15T21:09:41.413 回答