124 votes

Obtenir le nom de la classe actuelle ?

Comment puis-je obtenir le nom de la classe dans laquelle je suis actuellement?

Exemple:

 def get_input(class_name):
    [do things]
    return class_name_result

class foo():
    input = get_input([class name goes here])

En raison de la nature du programme avec lequel je m'interface (vistrails), je ne peux pas utiliser __init__() pour initialiser input .

191voto

Yuval Adam Points 59423

obj.__class__.__name__ vous donnera n'importe quel nom d'objet, vous pouvez donc faire ceci :

 class Clazz():
    def getName(self):
        return self.__class__.__name__

Usage:

 >>> c = Clazz()
>>> c.getName()
'Clazz'

24voto

Ned Batchelder Points 128913

Dans le corps d'une classe, le nom de la classe n'est pas encore défini, il n'est donc pas disponible. Ne pouvez-vous pas simplement taper le nom de la classe ? Peut-être que vous avez besoin d'en dire plus sur le problème afin que nous puissions trouver une solution pour vous.

Je créerais une métaclasse pour faire ce travail pour vous. Il est invoqué au moment de la création de la classe (conceptuellement à la toute fin de la classe : bloc) et peut manipuler la classe en cours de création. je n'ai pas testé ceci :

 class InputAssigningMetaclass(type):
    def __new__(cls, name, bases, attrs):
        cls.input = get_input(name)
        return super(MyType, cls).__new__(cls, name, bases, newattrs)

class MyBaseFoo(object):
    __metaclass__ = InputAssigningMetaclass

class foo(MyBaseFoo):
    # etc, no need to create 'input'

class foo2(MyBaseFoo):
    # etc, no need to create 'input'

21voto

MatToufoutu Points 5879

Vous pouvez y accéder par les attributs privés de la classe :

 cls_name = self.__class__.__name__

ÉDITER:

Comme l'a dit Ned Batcheler , cela ne fonctionnerait pas dans le corps de la classe, mais cela fonctionnerait dans une méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X