我正在尝试装饰一堂课
def decorate_module(Module):
class Wrapper(Module):
def __init__(self, cfg):
self.c = create_c(**cfg)
super().__init__()
return Wrapper
虽然代码有效,但它提供了一个名为“Wrapper”的类,而不是原始模块的名称。在功能装饰方面,可以@wraps
在这种情况下使用。我在课堂上尝试了同样的事情(通过在上面写它class Wrapper(Module):
但得到了一个错误。
这样做的正确方法是什么?python 内置装饰器@dataclass
似乎可以很好地处理这个问题。我想知道它是如何工作的。有没有像这样的辅助函数@wraps
?还是我应该手动覆盖__name__
?如果是这样,这些“双下划线”属性的完整列表是什么?
(编辑)我最初的目的
给定一个不接受任何参数的类__init__
,我想装饰它以接受一个参数“cfg”,做一些事情(create_c),并将其存储为一个属性。
准确地说,我的装饰器实际上将“create_c”作为参数(我在上面的代码中省略了这个,因为额外的嵌套会使它变得冗长)。然后,我正在考虑按如下方式使用它。
@decorate_module(create_fn1)
class Module1:
...
@decorate_module(create_fn2)
class Module2:
...