【发布时间】:2019-10-13 16:01:02
【问题描述】:
如果对象尚未实现 __str__ 方法,我想在对象上动态实现它。
我尝试使用hasattr(obj, '__str__') 它总是返回真,因为它从对象类中获取它。
有没有办法确定一个对象是否真正实现了__str__?
我知道我可以使用inspect.getmembers(obj),但我正在寻找一种更 Pythonic 的方式
编辑
class Employee(object):
def __init__(self, name, age, emp_code):
self.name = name
self.age = age
self.emp_code = emp_code
测试
e = Employee("A", 23, "E1")
print hasattr(e, '__str__')
>> True
我想要一个返回 False 的检查,而不是选择从 object 继承的方法。
【问题讨论】:
-
我已经尝试将 hasattr 用于 'str' 但它总是返回 true。另一件事是,如果我将 hasattr 用于 'eq' 它工作正常
-
检查
obj.__str__ != object.__str__是否足够? -
您希望它适用于任何继承的
__str__方法吗?如果方法不是来自object,而是继承链上的某个其他类怎么办? -
“动态实现
__str__”闻起来很可疑。你如何/为什么这样做? -
我希望你知道你不能将特殊方法monkeypatch到现有对象上; Python 不会检查实例的字典以查找特殊方法。
标签: python