>>> my_object.name = 'stuff'
>>> my_str = 'name'
>>> my_object[my_str] # won't work because it's not a dictionary :)
Come posso accedere ai campi di my_object
definiti su my_str
?Python - oggetto di accesso attributi come in un dizionario
>>> my_object.name = 'stuff'
>>> my_str = 'name'
>>> my_object[my_str] # won't work because it's not a dictionary :)
Come posso accedere ai campi di my_object
definiti su my_str
?Python - oggetto di accesso attributi come in un dizionario
getattr(my_object, my_str)
Qual è il vantaggio rispetto a 'myobject .__ dict __ [my_str]'? prestazioni migliori? –
Posso rispondere allo standard "È più Pythonic" risposta? Inoltre, attingere alle variabili private __ ha una sua serie di rischi. Quello che stai cercando di fare è ciò che getattr e setattr sono per. – Tom
Ok grazie per le informazioni –
>>> myobject.__dict__[my_str]
'stuff'
Si noti che questa interruzione per proprietà, '__slots__' e' __getattr __/__ getattribute __/__ setattr__' overload - e probabilmente alcune altre cose. – delnan
Ok grazie per le informazioni. Pensi che 'getattr (my_object, my_str)' sia anche meglio per le prestazioni? –
Le prestazioni sono la vostra minima preoccupazione qui. Se lo è, è possibile riscrivere quella parte (vale a dire l'intero ciclo, per evitare molte chiamate in più lingue) in C, ma si dovrebbe avere una solida prova di un rallentamento inaccettabile prima di considerare tali ottimizzazioni. – delnan
Non si può fare il __dict__
-approach in generale. Ciò che funziona sempre è
getattr(myobject, my_str)
Se si vuole accedere dict-come, solo definire una classe con un indice-operatore di overload.
btw, questo è totalmente valido in javascript – watashiSHUN