ho e oggetto con un pseudo o speciale attributo che può essere nominato in tre modi diversi (Nota: Non controllare il codice che genera l'oggetto)ottenere attributo dinamico in python
Il valore negli attributi (a seconda che uno è impostato) è esattamente la stessa, e ho bisogno di ottenere che per l'ulteriore elaborazione, quindi, a seconda della fonte di dati, posso avere qualcosa di simile:
>>> 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'
o
>>> 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'
o
>>> 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'
Sono interessato a ottenere 'value'
e purtroppo __dict__
proprietà non esiste in tale oggetto. Quindi quello che ho finito di fare per ottenere quel valore era fare un bel po 'di chiamate getattr
. Supponendo che le possibilità sono solo tre, il codice si presentava così:
>>> g = lambda o, l: getattr(o, l[0], getattr(o, l[1], getattr(o, l[2], None)))
>>> g(obj, ('a', 'b', 'c'))
'value'
Ora, vorrei sapere se c'è un modo migliore di questo? Come io sono convinto al 100% quello che ho fatto :)
Grazie in anticipo
Solo per controllare - non c'è un 'get_value()' (o simile) o come si menziona 'a seconda della fonte di dati' - nessuna mappatura esistente (o derivabile) di fonte -> nome attributo? –