公式ドキュメントによると:
オブジェクトに という名前のメソッドがある場合
__dir__()
、このメソッドが呼び出され、属性のリストを返す必要があります。__getattr__()
これにより、カスタムまたは__getattribute__()
関数を実装するオブジェクトはdir()
、その属性を報告する方法をカスタマイズできます。
カスタム__dir__
実装の場合、別の関数によって返される結果inspect.getmembers()
も影響を受けます。
例えば:
class С(object):
__slots__ = ['atr']
def __dir__(self):
return ['nothing']
def method(self):
pass
def __init__(self):
self.atr = 'string'
c = C()
print dir(f) #If we try this - well get ['nothing'] returned by custom __dir__()
print inspect.getmembers(f) #Here we get []
print f.__dict__ #And here - exception will be raised because of __slots__
この場合、オブジェクトの名前のリストはどのように取得できますか?