Articles of herencia múltiple

¿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 … […]

Python herencia múltiple de diferentes rutas con el mismo nombre de método

Con el siguiente ejemplo de código, ¿se puede usar super o C tiene que llamar a A.foo y B.foo explícitamente? class A(object): def foo(self): print ‘A.foo()’ class B(object): def foo(self): print ‘B.foo()’ class C(A, B): def foo(self): print ‘C.foo()’ A.foo(self) B.foo(self)

El constructor de herencia múltiple de Python no se llama cuando se usa super ()

Considere el siguiente código: class A(object): def __init__(self): pass class B(object): def __init__(self): self.something = ‘blue’ def get_something(self): return self.something class C(A,B): def __init__(self): super().__init__() print(self.get_something()) y luego hacer: c = C() lo que resulta en algo como esto: AttributeError: ‘C’ object has no attribute ‘something’ Supongo que esto sucede debido a que el constructor […]