Si supponga di avere un oggetto k
di tipo class A
. Abbiamo definito un secondo class B(A)
. Qual è la migliore pratica per "convertire" l'oggetto in class B
e conservare tutti i dati in ?Conversione oggetto Python
risposta
Questo fa la "conversione di classe", ma è soggetto a danni collaterali. Creare un altro oggetto e sostituire il suo __dict__
come pubblicato da BrainCore sarebbe più sicuro - ma questo codice fa quello che hai chiesto, senza creare nuovi oggetti.
class A(object):
pass
class B(A):
def __add__(self, other):
return self.value + other
a = A()
a.value = 5
a.__class__ = B
print a + 10
a = A() # parent class
b = B() # subclass
b.value = 3 # random setting of values
a.__dict__ = b.__dict__ # give object a b's values
# now proceed to use object a
Questo soddisfa il tuo caso d'uso? Nota: solo le variabili di istanza di b saranno accessibili dall'oggetto a, non dalle variabili di classe della classe B. Inoltre, le variabili che modificano in un caso a modificare la variabile in B, a meno che non si fa un deepcopy:
import copy
a.__dict__ = copy.deepcopy(b.__dict__)
In realtà, nessuna variabile verrà copiata. Dato che 'a' e' b' ora condividono entrambi lo stesso '__dict__', l'impostazione di' a.value' cambia anche 'b.value'. –
Hai ragione, corretto, grazie. – BrainCore
In questo caso, l'oggetto "a" dovrebbe essere distrutto immediatamente. Altrimenti uno finisce con due oggetti diversi, in classi diverse che condividono gli stessi attributi - ci sono pochi scenari peggiori di questo. (È spaventoso giocare anche al prompt interattivo) – jsbueno
- 1. conversione Data oggetto TimeWithZone
- 2. Pattern di conversione oggetto
- 3. Python conversione follia
- 4. Python Tipo conversione
- 5. Python Fuso orario conversione
- 6. conversione di oggetto NSDictionary su oggetto NSData e viceversa
- 7. Conversione di un oggetto "mappa" ad un oggetto "SpatialPolygon"
- 8. Conversione Python dizionario la lista
- 9. Python: binario a decimale conversione
- 10. Conversione oggetti Python per rpy2
- 11. Python: conversione stringa binaria/esadecimale?
- 12. python ha operatori di conversione?
- 13. Conversione di unità in Python
- 14. Python conversione args * per elencare
- 15. Conversione da vuoto * a oggetto in C#
- 16. Conversione da oggetto Java a sottoclasse
- 17. Entità oggetto per serializzazione/conversione CSV
- 18. Conversione oggetto del documento per byte []
- 19. implicita conversione a un oggetto C++ template
- 20. conversione da stringa a oggetto json android
- 21. Persistenza oggetto Python
- 22. Python sicurezza oggetto incapsulamento
- 23. Creazione oggetto Python
- 24. Conversione di oggetto stringa python in c char * utilizzando i tipi di carattere
- 25. Numpy-> Cython conversione: Errore di compilazione: Impossibile convertire 'npy_intp *' per oggetto Python
- 26. fsolve su Python (conversione del codice MATLAB per codice Python)
- 27. Python: conversione di frame GIF in PNG
- 28. Conversione dell'array NumPy nella struttura Elenco Python?
- 29. Python: Conversione XML in file CSV
- 30. Conversione Python da stringa binaria in esadecimale
In che modo stai cercando di convertire da uno all'altro? Vuoi mantenere tutte le variabili membro dell'oggetto di classe B, ma usa il set di metodi della classe madre A? – BrainCore
Questo Polymorphism è piuttosto scadente? Le sottoclassi A e B di una superclasse comune? Se è così, questa è la cosa sbagliata da fare? Ti piacerebbe che A avesse gli stessi metodi di B? Questo viene fatto attraverso l'ereditarietà multipla. Spiega perché pensi di averne bisogno perché - in Python - stai sbagliando se pensi di aver bisogno della conversione o della conversione del tipo. –
Anche molto curioso del tuo caso d'uso. È solo per divertimento o hai trovato che questo è un modo migliore per affrontare qualche problema, se non con l'aiuto del polimorfismo classico? –