如何检查__str__是否由对象实现

Bhu*_*han 10 python

我想__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

解决方案(感谢所有贡献者,总结如下)

  1. 检查是否False在对象上实现使用object
  2. 要动态添加__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,这似乎是你想要的.

  • 需要`type(f).__ dict __ ['__ str __']`来绕过继承。嗯,邓布斯。 (2认同)
  • 你**不能**对对象实现特殊方法.只在他们的课上. (2认同)