0

古いスタイルのクラスを使用するだけで、次のようにhasattr機能します。

>>> class old:
...     pass
...
>>> hasattr(old, '__eq__')
False

新しいスタイル クラスを使用すると、すべてのクラスに次の属性があります__eq__

>>> class nsc(object):
...     pass
...
>>> hasattr(nsc, '__eq__')
True

これは期待される動作であり、hasattr(object, '__eq__')も返しますTrue。これは、すべてのリッチ比較メソッドに当てはまります。

使用できない場合、クラスがリッチ比較メソッドを実装しているかどうかを確認するにはどうすればよいhasattrですか? 頭に浮かぶことの 1 つは、メソッドを呼び出して、NotImplemented例外が発生するかどうかを確認することです。しかし、これらのメソッドを呼び出すと、予期しない損害が発生する可能性があります。

4

1 に答える 1

1

dirの代わりに を使用して実行できますhasattr。豊富な比較メソッドは、関数によって返されるリストには表示されませんdir

>>> class nsc(object):
...     pass
...
>>> '__eq__' in dir(nsc)
False
于 2015-10-17T20:33:42.507 に答える