Capisco che in python, ogni volta che si accede a una variabile di classe/istanza, chiamerà il metodo __getattribute__
per ottenere il risultato. Tuttavia, posso anche usare direttamente obj.__dict__['x']
e ottenere quello che voglio.Differenza tra __getattribute__ e obj .__ dict __ ['x'] in python?
Sono un po 'confuso su quale sia la differenza? Anche quando uso getattr(obj, name)
, si chiama __getattribute__
o obj.__dict__[name]
internamente?
Grazie in anticipo.
http://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute dovrebbe chiarire il tuo dubbio. –
@AashishP grazie per il commento. Ma quel post spiega la differenza tra '__getattr__' e' __getattribute__'. Sembra che 'getattr' abbia poco a che fare con' __getattr__', quindi stai implicando che 'getattr' sia effettivamente uguale a' obj .__ dict __ [nome] '? – cizixs
Sì, giusto. Ho provato a scavare il codice sorgente di CPython ed ecco cosa ho trovato, in linguaggio semplice, http://stackoverflow.com/questions/24863787/python-the-getattribute-method-and-descriptors –