小编Ala*_*gel的帖子

Monkey-patching class.__str__ 使用装饰器不起作用

我正在尝试__str__通过以下装饰器修补类的特殊方法:

def str_patcher(klass):
    def decorator(*args, **kwargs):
        def __str__(self):
            items = {key: value for key, value in self.__dict__.items() if not key.startswith("_")}
            return f"{type(self).__qualname__}({items})"

        klass.__str__ = __str__
        return klass

    return decorator
Run Code Online (Sandbox Code Playgroud)

然后,我做了一个MyClass装饰的类str_patcher

@str_patcher
class MyClass:
    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)

但是当我打印出来时MyClass(a=1, b=2, c=3),我希望看到,MyClass({a: 1, b: 2, c: 3})但我却看到了<class __main__.MyClass>

为什么是这样?

python monkeypatching class python-3.x python-decorators

1
推荐指数
1
解决办法
37
查看次数