Tengo una clase A y quiero una clase B con exactamente las mismas capacidades. No puedo o no quiero heredar de B, como hacer clase B (A): pase Aún quiero que B sea idéntico a A, pero tenga un i: id diferente (A)! = Id (B) Cuidado, no estoy hablando de instancias sino de clases para clonar.¿Cómo se clona una clase en Python?
Respuesta
Estoy bastante seguro de lo que está tratando de hacer puede ser resuelto de una manera mejor, pero aquí es algo que le da un clon de la clase con una nueva ID:
def c():
class Clone(object):
pass
return Clone
c1 = c()
c2 = c()
print id(c1)
print id(c2)
da:
4303713312
4303831072
Esto es exactamente lo que estaba buscando. La solución es perfecta: simple y al grano. Sabía que había una solución, pero sabía que tenía que ser simple. Esta es la primera vez que hago una pregunta a SO y estoy sorprendido de cuán reactivo es, en comparación con el casi extinto comp.lanp.python. ¡Muchas gracias! – Francois
que no toma una clase existente sin embargo. Parece que realmente querías un "generador de clases" que genere la misma clase cada vez. – zzzeek
@Francois: ¿Por qué dices en tu pregunta "No puedo o no quiero heredar de B, como hacer clase B (A): aprobar" si ahora aceptas esta solución? –
Puede clonar la clase por herencia. De lo contrario, solo está pasando una referencia a la clase en sí misma (en lugar de una referencia a una instancia de la clase). ¿Por qué querrías duplicar la clase de todos modos? Es obvio por qué querrías crear varias instancias de la clase, pero no puedo entender por qué querrías una clase duplicada. También, usted puede simplemente copiar y pegar con un nuevo nombre de la clase ...
class C(object):
pass
class A(C):
pass
class B(C):
pass
tal vez no he entendido usted pregunta pero ¿qué pasa envolviendo A en B?
class A:
def foo(self):
print "A.foo"
class B:
def __init__(self):
self._i = A()
def __getattr__(self, n):
return getattr(self._i, n)
Supongo que esto no es lo que quería pero es lo que la cuestión parece estar pidiendo ...
class Foo(object):
def bar(self):
return "BAR!"
cls = type("Bar", (object,), dict(Foo.__dict__))
print cls
x = cls()
print x.bar()
Esta es la respuesta a la pregunta que pensé que estaba haciendo. Los usuarios pueden querer copiar profundamente el Foo .__ dict__, dependiendo de su uso. ¿Podría envolverlo en una función reutilizable (donde pasaría la clase anterior y el nombre de nuevo)? – markets
Me pregunto por qué siempre he usado 'type .__ new __()' aquí? Lo vi por primera vez en un paquete Python particular escrito por un conocido gurú de Python y estaba usando '__new__()' por alguna razón. – zzzeek
- 1. ¿Cómo se clona un diccionario en .NET?
- 2. ¿Cómo se clona una máquina virtual utilizando VMware Fusion?
- 3. ¿Cómo diseño una clase en Python?
- 4. Cómo definir una clase en Python
- 5. Cómo falsificar/proxy una clase en Python
- 6. Validación ignorado cuando se clona un registro recién creado
- 7. Python 2.6: ¿clase dentro de una clase?
- 8. cómo crear dinámicamente una instancia de una clase en python?
- 9. ¿Cómo se implementa una clase en C?
- 10. ¿Cómo se requiere ARC en una clase?
- 11. ¿Cómo copiar una clase de python?
- 12. python: decorar una clase definiendo el decorador como una clase
- 13. ¿Cómo puedo recuperar una clase anidada en python?
- 14. ¿Cómo obtengo el filepath para una clase en Python?
- 15. cómo acceder a una clase desde un dll en python?
- 16. Definiendo "boolness" de una clase en Python
- 17. ¿Cómo anulo las funciones de una clase padre en python?
- 18. ¿Cómo creo una clase de Python en C?
- 19. ¿Cómo crearía una clase de lista personalizada en python?
- 20. ¿Git no clona todas las ramas en los clones subsiguientes?
- 21. Cómo evitar que se anule una función en python
- 22. Cómo utilizar una constante se reemplaza en una clase inheritanced
- 23. ¿En el Diseño Dirigido por Dominio cuando una entidad se clona a sí misma y lo agrega a su contenedor?
- 24. ¿Cómo se crea un ID incrementales en una clase de Python
- 25. En Python, ¿cómo llamo a la súper clase cuando se trata de una sola vez?
- 26. C#: ¿cómo se obtiene una clase base de clase?
- 27. ¿Cómo se asigna un nombre de clase totalmente calificado a su objeto de clase en Python?
- 28. Si no clona en Java, ¿qué hace y cómo lo llama?
- 29. cómo extender Python init clase
- 30. Crear una instancia de una clase python en C#
herencia es la clonación de clase. Decir que no quieres heredar es una tontería. –
heredar mejor que ir al territorio de meta –
¿Quizás quiere poder cambiar el clon de formas que no podría hacerlo definiendo propiedades adicionales en una clase derivada (como eliminar propiedades de la clase base nocional)? – markets