Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中恰当地修饰类_Python_Module_Decorator - Fatal编程技术网

如何在python中恰当地修饰类

如何在python中恰当地修饰类,python,module,decorator,Python,Module,Decorator,我做这件事有点困难。目前,我有一个模块,其中有一堆类,其中一些类将被修饰以表示一些东西 我想创建一个新的假模块,它只包含修饰过的类。比如说: class FakeModule: pass def Decorator(cls): attr = getattr(RealModule, cls) setattr(FakeModule, cls, attr) 有什么建议吗?我对python和python decorators还很陌生,所以我不确定该怎么做 我想创建一个新的假模块,它只

我做这件事有点困难。目前,我有一个模块,其中有一堆类,其中一些类将被修饰以表示一些东西

我想创建一个新的假模块,它只包含修饰过的类。比如说:

class FakeModule: pass

def Decorator(cls):
    attr = getattr(RealModule, cls)
    setattr(FakeModule, cls, attr)
有什么建议吗?我对python和python decorators还很陌生,所以我不确定该怎么做

我想创建一个新的假模块,它只包含修饰过的类

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

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)

你用“模块”这个词把我弄糊涂了。还有你想要实现的目标。为什么呢,基本上我有一个文件,里面有很多测试类。其中一些测试类将用@Decorator()修饰。在其他地方,我有一些类似的东西:functionwhichdoesstuff with testclass(file_with_class)。我需要的是文件_,其中_类是“唯一”修饰类,因此我尝试动态创建。“测试”类是什么意思——测试类,还是更像“实践”类?2.我还是不明白你想做什么。你读过装饰师的文档吗?抱歉,它们基本上只是用于测试的类。我试图实现的是,基于这些装饰器,一些测试类应该加载,其他的不应该加载……我或多或少已经这样做了,问题是它发生在装饰之后。装饰所有类,设置属性,然后稍后检查属性并决定加载它。我们需要它在装饰时(即在装饰器方法本身中添加有问题的类)@user1161306:只需在装饰器中调用
setattr(fakemodule,classname,classobject)