Articles of herencia múltiple

Django – eliminando objeto, manteniendo padre?

Tengo la siguiente situación de herencia de varias tablas: from django.db import Models class Partner(models.Model): # this model contains common data for companies and persons code = models.CharField() name = models.CharField() class Person(Partner): # some person-specific data ssn = models.CharField() class Company(Partner): # some company-specific data tax_no = models.CharField() ¿Cómo puedo convertir una instancia de […]

¿Cómo funciona realmente el super () de Python, en el caso general?

Hay una gran cantidad de excelentes recursos en super() , incluida esta gran publicación de blog que aparece mucho, así como muchas preguntas sobre el desbordamiento de stack. Sin embargo, siento que todos ellos no llegan a explicar cómo funciona en el caso más general (con gráficos de herencia arbitrarios), así como lo que está […]

¿Por qué tengo que especificar mi propia clase cuando uso super () y hay una manera de evitarlo?

Al usar el super() Python para hacer el encadenamiento de métodos, debe especificar explícitamente su propia clase, por ejemplo: class MyDecorator(Decorator): def decorate(self): super(MyDecorator, self).decorate() Tengo que especificar el nombre de mi clase MyDecorator como un argumento para super() . Esto no es SECO. Cuando renombre mi clase ahora tendré que renombrarla dos veces. ¿Por […]

__bases__ no funciona! ¿Que sigue?

El siguiente código no funciona en Python 3.x, pero solía trabajar con clases de estilo antiguo: class Extender: def extension(self): print(“Some work…”) class Base: pass Base.__bases__ += (Extender,) Base().extension() La pregunta es simple: ¿Cómo puedo agregar dinámicamente (en tiempo de ejecución) una súper clase a una clase en Python 3.x? ¡Pero estoy lista la respuesta […]

Sqlalchemy: evitar la herencia múltiple y tener una clase base abstracta

Así que tengo un montón de tablas que usan SQLAlchemy que se modelan como objetos que heredan del resultado a una llamada a declarative_base() . Es decir: Base = declarative_base() class Table1(Base): # __tablename__ & such here class Table2(Base): # __tablename__ & such here Etc. Luego quise tener alguna funcionalidad común disponible para cada una […]

llamando a init para múltiples clases para padres con super?

Posible duplicado: ¿Puede Super tratar con herencia múltiple? La herencia de Python? Tengo una estructura de clase (abajo), y quiero que la clase infantil llame al __init__ de ambos padres. ¿Se puede hacer esto de una manera ‘súper’ o es solo una idea terrible? class Parent1(object): def __init__(self): self.var1 = 1 class Parent2(object): def _init__(self): […]

Resolviendo conflictos de metaclase

Necesito crear una clase que use una clase base diferente dependiendo de alguna condición. Con algunas clases me sale el infame: TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases Un ejemplo es sqlite3 , aquí hay un pequeño ejemplo que puede usar […]

¿Puede Super tratar con herencia múltiple?

Al heredar de dos objetos como estos. class Foo(object): def __init__(self,a): self.a=a class Bar(object): def __init__(self,b): self.b=b Normalmente haria algo como esto class FooBar(Foo,Bar): def __init__(self,a,b): Foo.__init__(self,a) Bar.__init__(self,b) ¿Cómo sabe super si quiero llamar a los dos? y si es así, ¿cómo sabrá qué argumento pasar dónde? ¿O simplemente no es posible el usuario super […]

herencia múltiple de Python que pasa argumentos a los constructores usando super

Considere el siguiente fragmento de código de Python class A(object): def __init__(self, a): self.a = a class B(A): def __init__(self, a, b): super(B, self).__init__(a) self.b = b class C(A): def __init__(self, a, c): super(C, self).__init__(a) self.c = c class D(B, C): def __init__(self, a, b, c, d): #super(D,self).__init__(a, b, c) ??? self.d = d Me […]

Python: ¿La forma correcta de inicializar cuando las superclases aceptan diferentes argumentos?

Si tengo tres clases como esta: class BaseClass(object): def __init__(self, base_arg, base_arg2=None): … class MixinClass(object): def __init__(self, mixin_arg): … class ChildClass(BaseClass, MixinClass): def __init__(self, base_arg, mixin_arg, base_arg2=None): ??? ¿Cuál es la forma correcta de inicializar MixinClass y BaseClass ? No parece que pueda usar super porque la MixinClass y la BaseClass aceptan diferentes argumentos … […]