Obtenir le nom de la classe parent?

class A(object): def get_class(self): return self.__class__ class B(A): def __init__(self): A.__init__(self) b = B() print b.get_class() 

Ce code imprimera .

Comment puis-je obtenir le nom de la classe où la méthode a été définie (à savoir A )?

De la documentation: https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy

Les objects de classe ont un atsortingbut __name__ . Il __bases__ peut-être plus __bases__ la __bases__ les classes de base à travers les __bases__ attr de la classe dérivée (si le code doit vivre dans la classe dérivée par exemple).

 >>> class Base(object): ... pass ... >>> class Derived(Base): ... def print_base(self): ... for base in self.__class__.__bases__: ... print base.__name__ ... >>> foo = Derived() >>> foo.print_base() Base 

inspect.getmro(cls)

Retourne un tuple de classes de base de classe cls, y compris cls, dans l’ordre de résolution de la méthode. Aucune classe n’apparaît plus d’une fois dans ce tuple. Notez que l’ordre de résolution de la méthode dépend du type de cls. À moins d’utiliser un métatype très particulier défini par l’utilisateur, cls sera le premier élément du tuple.

 import inspect inspect.getmro(B) 

le résultat sera:

 (, , ) 

Le premier élément est la classe elle-même, le deuxième élément est toujours le premier des parents. Après cela, les choses peuvent devenir plus compliquées.

Vous pourriez changer

 return self.__class__ return A().__class__ 

Comme il n’y a pas d’autre instance de A () disponible …