So che non è possibile chiamare object.__setattr__
su oggetti non ereditati da object
, ma c'è qualcos'altro che è diverso tra i due? Sto lavorando in Python 2.6, se questo è importante.Qual è la differenza tra setattr() e oggetto .__ setattr __()?
risposta
setattr(instance, name, value)
è zucchero sintattico per instance.__setattr__(name, value)
.
Si avrebbe solo bisogno di chiamare object.__setattr__(...)
all'interno di una definizione di classe, e solo se sottoclasse direttamente object
- se si stesse sottoclasse qualcos'altro, Spam
per esempio, allora si dovrebbe usare sia super()
per ottenere l'elemento successivo nella gerarchia , o chiama Spam.__setattr__(...)
- in questo modo non rischierai il comportamento mancante che le super classi hanno definito saltando su di loro direttamente su object
.
Grazie, questo lo spiega. Il codice sta probabilmente usando 'object .__ setattr__' per lo scopo esatto di saltare il __setattr__ della superclasse. –
_ "setattr (istanza, nome, valore) è zucchero sintattico per esempio .__ setattr __ (nome, valore)" _ - è davvero? Ricordo vagamente che alcuni tipi non hanno '__getattr__' ma ottenere gli attributi funziona per loro indipendentemente. Non è lo stesso qui? –
- 1. `oggetto .__ setattr __ (self, ..., ...)` invece di `setattr (self, ..., ...)`?
- 2. setattr (oggetto, nome, valore) vs oggetto .__ setattr __ (nome, valore)
- 3. getattr e setattr su oggetti annidati?
- 4. Equivalente rubino di python setattr()
- 5. Python __init__ setattr su argomenti?
- 6. oggetti nidificati e setattr & getattr (sì, è che il tempo)
- 7. setattr con kwargs, pythonic o no?
- 8. Python: Qual è la differenza tra __builtin__ e __builtins__?
- 9. Qual è la differenza tra un array e un oggetto?
- 10. Qual è la differenza tra oggetto e riferimento?
- 11. Qual è la differenza tra modello dati e modello oggetto?
- 12. Perché setattr funziona in modo diverso per attributi e metodi?
- 13. Qual è la differenza tra Oggetto, Oggetto e [1: Oggetto, 2: Oggetto]?
- 14. Qual è la differenza tra = e: =
- 15. Qual è la differenza tra Verilog! e ~?
- 16. Qual è la differenza tra? : e ||
- 17. qual è la differenza tra [[], []] e [[]] * 2
- 18. Qual è la differenza tra $ e $$?
- 19. Qual è la differenza tra ("") e (null)
- 20. Qual è la differenza tra dict() e {}?
- 21. Qual è la differenza tra " " e ""?
- 22. Qual è la differenza tra {0} e ""?
- 23. Qual è la differenza tra `##` e `hashCode`?
- 24. Qual è la differenza tra {0} e +?
- 25. Qual è la differenza tra .ToString() e + ""
- 26. qual è la differenza tra:.! e: r !?
- 27. Differenza tra oggetto e *?
- 28. Classe, oggetto, entità: qual è la differenza?
- 29. Qual è la differenza tra la serratura e RLock
- 30. Qual è la differenza tra ArrayBlockingQueue e LinkedBlockingQueue
'setattr' è qualcosa che si chiama su un altro oggetto,' __setattr __() 'è qualcosa che si implementa sul proprio oggetto. –
'setattr (obj, attr, value)' chiama semplicemente 'obj .__ setattr __ (attr, value)', almeno per le classi di nuovo stile. – agf