我正在尝试__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>
。
为什么是这样?