我正在尝试用另一个类装饰一个类。我也想从装饰类继承,但我得到了一些错误。这是我的代码:
class Decorator:
def __init__(self, decorated):
pass
@Decorator
class Foo:
pass
class Goo(Foo):
pass
当我尝试从
Foo
子类化时遇到的错误是:通过向
Decorator
添加另一个 init 函数...def __init__(self, *args):
for arg in args:
print(arg)
...我得到以下输出:
这些参数是什么,我应该如何在
Decorator
中使用它们? 最佳答案
我将尝试回答“这些参数是什么”的问题。这段代码:
@Decorator
class Foo:
pass
相当于:
class Foo:
pass
Foo = Decorator(Foo)
这意味着
Foo
最终成为 Decorator
类的 实例 而不是一个类。当您尝试将此实例用作类 (
Goo
) 的基础时,Python 必须确定将用于创建新类的元类。在这种情况下,它将使用等于 Foo.__class__
的 Decorator
。然后它将使用 (name, bases, dict)
参数调用元类并期望它返回一个新类。这就是你在
Decorator.__init__
中得到这些参数的方式。可以在此处找到有关此内容的更多信息:
http://www.python.org/download/releases/2.2.3/descrintro/#metaclasses
(特别是“当执行类语句时...”部分)
关于python - 从装饰类继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7477311/