J'utilise le paquet python attrs
, en combinaison avec l'héritage et les slots. Je souhaite appeler la méthode de la classe parente à l'intérieur de la méthode dérivée. Le problème est démontré ci-dessous:Quelle est la différence entre super() et super explicite (Cl, self) (avec __slots__ et attrs)
import attr
@attr.s(slots=True)
class Base():
def meth(self):
print("hello")
@attr.s(slots=True)
class Derived(Base):
def meth(self):
super().meth()
print("world")
d = Derived()
d.meth()
je reçois:
TypeError: super(type, obj): obj must be an instance or subtype of type
Le problème semble être déclenché par une combinaison de attrs (classes undecorated avec un travail explicite __slots__=()
), machines à sous (@attr.s
régulières des classes -decorated travail) et l'appel plain super()
(super(Derived, self)
fonctionne).
Je voudrais comprendre comment super()
se comporte différemment de l'explicite la version super(Derived, self)
, puisque le documentation dit qu'ils « font la même chose »
Cela a depuis été corrigé dans attrs: https://github.com/python-attrs/attrs/pull/226 – Niobos