我想在对象上动态实现__str__
方法(如果对象尚未实现它)。如何检查__str__是否由对象实现
我尝试使用hasattr(obj, '__str__')
它总是返回我真实的,因为它从对象类中捡起它。
有没有办法确定一个对象实际上是否实现了__str__
?
我知道我可以使用inspect.getmembers(obj)
但是我正在寻找一个更Python的方式
编辑
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
我想hasattr返回false因为Employee类未执行str
解(感谢所有贡献者,下面总结)
- 要检查是否
__str__
上一个对象使用实施type(obj).__str__ is object.__str__
- 动态地添加
__str__
方法使用setattr(obj.__class__, '__str__', lambda x: "New String")
我用hasattr为“__str__”但它始终返回true已经尝试过。另一件事是,如果我使用'__eq__'的hasattr,它可以正常工作 – Bhushan
检查'obj .__ str__!= object .__ str__'是否足够? – Gabe
你想让它适用于任何继承的__str__方法吗?如果这个方法不是来自'object',而是继承链上的其他类呢? – reem