我想在對象上動態實現__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