11

__str__オブジェクトがまだメソッドを実装していない場合、オブジェクトにメソッドを動的に実装したいと考えています。

オブジェクトクラスから取得するため、使用してみるhasattr(obj, '__str__')と常にtrueが返されます。

オブジェクトが実際に実装しているかどうかを判断する方法はあります__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

4

5 に答える 5

15

チェックしたいのは、デフォルトではない__str__実装があるかどうかです。したがって、これを行うことができます:object.__str__

Foo.__str__ is not object.__str__

インスタンス化されたオブジェクトを確認するには、クラスを確認する必要があります。

type(f).__str__ is not object.__str__

これは、 Foo が__str__直接実装されていなくても機能しますが、 以外の別のクラスから継承した場合でも機能objectします。

于 2013-10-28T06:44:03.753 に答える
0

objectベースから継承するすべてのオブジェクトには__str__メソッドがあるため、存在するかどうかのテストは無視できます。

オブジェクトにフラグ属性を保存し、代わりにそれをテストできます。

if not getattr(obj, 'has_str_override_flag'):
    override_str_here(obj)
    setattr(obj, 'has_str_override_flag', True)
于 2013-10-28T06:44:13.757 に答える