python - 子类化装饰类

标签 python subclass decorator metaclass

您将如何子类化装饰类?这是一些代码,我想我一定遗漏了一些非常简单的东西

def decorator_with_args(*args, **kwargs):
    def decorator(cls):
        def wrapper(*wargs, **wkwargs):
            print("wargs", wargs, wkwargs)
            return cls(*wargs, **wkwargs)

        return wrapper

    return decorator


@decorator_with_args()
class MyClass(object):
    def __init__(self, *args, **kwargs):
        print("args", args, kwargs)


class MySubClass(MyClass):
    pass


myClass = MyClass("arg", kwarg="kwarg")

这将在编译时引发 TypeError

Traceback (most recent call last):
  File "/path/to/file", line 46, in <module>
    class MySubClass(MyClass):
TypeError: function() argument 1 must be code, not str

最佳答案

你的装饰者错了。它应该返回一个类而不是一个函数。

def decorator_with_args(*args, **kwargs):
    def decorator(cls):
        class Wrapper(cls):
            def __init__(self, *wargs, **wkwargs):
                print(wargs, wkwargs)

        return Wrapper

    return decorator

关于python - 子类化装饰类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28085459/

相关文章:

python - 如何使用给定的装饰器获取python类的所有方法

Angular 4装饰器无法访问类范围

python - 试图理解 Python 包装器

python - 从python3中的文件中读取字节字符串

python - 如何对信号保留尖峰进行下采样?

c++ - 如何覆盖父类的静态变量

swift - 如何调用 UITableViewCell 内部的 textField (swift)

JavaScript:从父类(super class)实例内部创建子类

python - 将相对 url 路径解析为其绝对路径

python - 如何将 HTML 与 Django 集成?