【发布时间】:2021-10-13 06:23:21
【问题描述】:
我正在尝试通过以下装饰器对类的 __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
然后,我制作了一个由str_patcher装饰的MyClass类:
@str_patcher
class MyClass:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
但是当我打印出MyClass(a=1, b=2, c=3) 时,我希望看到MyClass({a: 1, b: 2, c: 3}),但我却得到了<class __main__.MyClass>。
这是为什么?
【问题讨论】:
-
您确定要修补
__str__,而不是__repr__? -
哦,我想要补丁
__str__首先进行测试。
标签: python python-3.x class python-decorators monkeypatching