Supongamos que tenemos un objeto k
de tipo class A
. Definimos un segundo class B(A)
. ¿Cuál es la mejor práctica para "convertir" el objeto k
en class B
y conservar todos los datos en k
?Conversión de objeto Python
Respuesta
Esto hace la "conversión de clase", sino que está sujeta a daños colaterales. Crear otro objeto y reemplazar su __dict__
como BrainCore publicado sería más seguro, pero este código hace lo que usted pidió, sin crear ningún objeto nuevo.
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
¿Satisface esto su caso de uso? Nota: Solo las variables de instancia de b serán accesibles desde el objeto a, no las variables de clase de clase B. Además, la modificación de las variables de un modificarán la variable en b, a menos que haga un deepcopy:
import copy
a.__dict__ = copy.deepcopy(b.__dict__)
En realidad, no se copiarán variables. Como 'a' y' b' ahora comparten el mismo '__dict__', la configuración' a.value' también cambia 'b.value'. –
Tienes razón, corregido, gracias. – BrainCore
En realidad, al hacer esto, el objeto "a" debe destruirse inmediatamente. El otro termina con dos objetos diferentes, en diferentes clases que comparten los mismos atributos; hay pocos escenarios peores que este. (Da miedo jugar incluso en el aviso interactivo) – jsbueno
- 1. Patrón de conversión de objeto
- 2. Python Zona horaria conversión
- 3. Conversión de unidades en Python
- 4. ¿python tiene operadores de conversión?
- 5. Conversión de un objeto Date a un objeto de calendario
- 6. conversión de objeto de documento a byte []
- 7. Conversión de un objeto jQuery a un objeto simple
- 8. Conversión de void * a objeto en C#
- 9. Numpy-> Cython conversión: Error de compilación: No se puede convertir 'npy_intp *' al objeto de Python
- 10. Reflexión de Python y conversión de tipo
- 11. Entidad objeto a serialización/conversión CSV
- 12. Python: Conversión de marcos GIF a PNG
- 13. Conversión de PDF a HTML con Python
- 14. Problema de conversión Python UTF-8
- 15. conversión rápida de datos binarios en Python
- 16. Python - Conversión de hexadecimal a INT/CHAR
- 17. flotador de python en la conversión int
- 18. Conversión de cadenas como \\ uXXXX en python
- 19. Conversión de código Python a PHP
- 20. Conversión de lista a * args en Python
- 21. Persistencia de objeto Python
- 22. Conversión de matriz de caracteres en el objeto NSString
- 23. Python Slurp Archivo w conversión A/endian
- 24. conversión de Excepción a una cadena en Python 3
- 25. Objeto Python @property
- 26. Conversión de solicitud HTTP sin procesar en el objeto HTTPWebRequest
- 27. conversión implícita a un objeto de C++ plantilla
- 28. Conversión de cadena con desplazamiento UTC a un objeto datetime
- 29. Python: conversión de lista de listas a tuplas de tuplas
- 30. Conversión de objeto a JSON y JSON a objeto en PHP, (biblioteca como Gson para Java)
¿De qué manera está buscando convertir de una a la otra? ¿Desea mantener todas las variables miembro del objeto de clase B, pero usa el conjunto de métodos de la clase padre A? – BrainCore
¿Es este bastante mal polimorfismo? ¿Son subclases A y B de una superclase común? Si es así, ¿esto es lo incorrecto que hacer? ¿Deseas que A tuviera los mismos métodos que B? Esto se hace a través de herencia múltiple. Explique por qué cree que necesita esto porque, en Python, lo está haciendo mal si cree que necesita conversión o conversión de tipo. –
También es muy curioso acerca de su caso de uso. ¿Es solo por diversión, o ha encontrado que esta es una mejor manera de abordar algún problema, que no sea con la ayuda del polimorfismo clásico? –