我想__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
Run Code Online (Sandbox Code Playgroud)
测试
e = Employee("A", 23, "E1")
print hasattr(e, '__str__')
>> True
Run Code Online (Sandbox Code Playgroud)
我希望hasattr返回False,因为Employee类没有实现str
解决方案(感谢所有贡献者,总结如下)
False在对象上实现使用object__str__方法使用hasattr(obj, '__str__')Len*_*bro 11
既然你要检查什么,如果它有一个__str__是执行不默认object.__str__.因此,您可以这样做:
Foo.__str__ is not object.__str__
Run Code Online (Sandbox Code Playgroud)
要检查实例化对象,您需要检查类:
type(f).__str__ is not object.__str__
Run Code Online (Sandbox Code Playgroud)
即使Foo没有__str__直接实现,但是从另一个类继承它,它也会起作用object,这似乎是你想要的.