私は、3 つの異なる方法で名前を付けることができる疑似属性または特別な属性を持つオブジェクトを持っています (注: オブジェクトを生成するコードは制御しません)。
属性の値 (設定されている属性に応じて) はまったく同じであり、さらに処理するためにそれを取得する必要があるため、データのソースに応じて、次のようなものを使用できます。
>>> obj.a
'value'
>>> obj.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'
また
>>> obj.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
'value'
>>> obj.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'
また
>>> obj.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
'value'
取得に興味が'value'
ありますが、残念ながら__dict__
そのオブジェクトにはプロパティが存在しません。そのため、その値を取得するために私が行ったことは、一連のgetattr
呼び出しを行うことでした。可能性が 3 つだけであると仮定すると、コードは次のようになります。
>>> g = lambda o, l: getattr(o, l[0], getattr(o, l[1], getattr(o, l[2], None)))
>>> g(obj, ('a', 'b', 'c'))
'value'
今、これにもっと良い方法があるかどうか知りたいですか?私は自分がやったことを100%確信しているので:)
前もって感謝します