子类化修饰类

2024-09-30 02:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

您将如何对装饰类进行子类化?这里有一些代码,我想我一定错过了一些非常简单的东西

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

Tags: returndefwithmyclassargsdecoratorwrapperkwargs
1条回答
网友
1楼 · 发布于 2024-09-30 02:32:53

你的装潢师错了。它应该返回一个类而不是函数。你知道吗

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

        return Wrapper

    return decorator

相关问题 更多 >

    热门问题