Existe-t-il un moyen d'obtenir toutes les fonctions remplacées d'une sous-classe en Python?
Exemple:
class A:
def a1(self):
pass
def a2(self):
pass
class B(A):
def a2(self):
pass
def b1(self):
pass
Ici, je voudrais obtenir une liste ["a2"]
pour un objet de classe B
(ou pour l'objet de classe lui-même) car la classe B
ne remplace qu'une seule méthode, à savoir a2
.
python
reflection
overriding
subclass
Andreas Schörgenhumer
la source
la source
vars
était la chose qui me manquait. un grand merci pour la réponse (incroyablement) rapide!parent_attrs
en une seule ligne si vous voulez:parent_attrs = {a for b in cls.__bases__ for a in dir(b)}
Vous pouvez utiliser le
__mro__
tuple, qui contient l'ordre de résolution des méthodes.Pour votre exemple:
Vous pouvez donc parcourir ce tuple et vérifier si une
B
méthode se trouve également dans l'une des autres classes.la source
__init__, __eq__, ....... etc
la source
A
etB
ne peuvent pas être modifiées. OP veut savoir laquelle desB
méthodes prévaut sur l'une desA
méthodes.