我正在考虑写一个类装饰器,它将检查从object
继承的特定方法是否被重写。
import io
def check_str_method(kls:type) -> type:
with io.StringIO() as strm:
if "__str__" in kls.__dict__:
print("`__str__` is in `__dict__`", file = strm)
if "__str__" in dir(kls):
print("`__str__` is in container returned by `dir(kls)`", file = strm)
str_method = getattr(kls, "__str__")
if str_method == object.__str__:
pass
if str_method == object.__str__:
pass
return kls
@check_str_method
class ChildClass1:
pass
@check_str_method
class ChildClass2:
def __str__(self):
return "I HAVE OVERRIDDEN __str__"
obj1 = ChildClass1()
obj2 = ChildClass2()
print("obj1...", str(obj1))
print("obj2...", str(obj2))
正确的Python方法是什么?我们是否检查mro()
(方法解析顺序?)
我们在__bases__
中搜索吗?
1条答案
按热度按时间igetnqfo1#
我的答案是基于Ashwini Chaudhary的评论。
一些代码,如以下可能工作,但我希望有人会张贴一个更好的答案,他们的答案将得到更多的赞成票比我的。