2017-08-28 9 views
0

Je suis un peu novice en programmation et je ne savais pas vraiment comment chercher la réponse à ce problème particulier, alors j'ai pensé partager un exemple pour faire passer mon message. J'écris actuellement un script qui ajoutera une instance de ma classe (candidat nommé) à une base de données mongo ailleurs. Mon problème est que dans plusieurs de mes méthodes, je dois retourner le nom d'une classe à partir d'une fonction telle que la valeur retournée puisse être utilisée comme paramètre dans un autre appel. Voici un exempleComment retourner le nom d'une classe à utiliser comme argument

modelName = get_class().getModelName() 

Dans le code ci-dessus, j'essaie de récupérer le nom d'un modèle de données particulier en question. Mon idée pour cela était d'écrire deux méthodes, une pour retourner le nom de la classe où le nom du modèle peut être trouvé, et une autre pour retourner le nom du modèle réel. Ceci est fait dans une classe abstraite afin que la fonctionnalité de mes sous-classes puisse être généralisée (sinon je mettrais simplement le nom du modèle et le nom de la classe directement). Ce que je ne sais pas, c'est comment écrire une méthode qui retournera le nom de la classe dans un format compatible avec l'utilisation ci-dessus. Donc, par exemple, si j'écris la méthode dans une classe appelée Rushee, alors il devrait être capable de retourner un 'rushee' d'une manière où rushee.getModelName() fonctionnera.

Toutes les idées seraient incroyablement utiles. Je vous remercie!

Répondre

1

Pour obtenir le nom de la classe, vous pouvez utiliser ce code

class SomeClass(): 
    def getName(self): 
     return self.__class__.__name__ 
1

IIUC, vous pouvez utiliser l'attribut __class__ d'un objet pour obtenir le nom de la classe qu'il est une instance.

In [60]: class Foo(): 
    ...:  pass 
    ...:  
    ...:  

In [61]: x.__class__ 
Out[61]: __main__.Foo 

Cela renvoie le nom complet (y compris l'espace de noms l'objet appartient à), pour ainsi obtenir que la dernière partie, vous feriez x.__class__.__name__.

0

Voici une méthode

class Grid: 
    pass 

g = Grid() 
type(g).__name__ 

Ceci est similaire à ce que COLDSPEED posté plus tôt:

g.__class__.__name__ 
0

Dans une hiérarchie de classes:

class A(): 
    def get_class_name(self): 
     return self.__class__.__name__ 

class B(A): 
    pass 

b = B() 

print(b.get_class_name()) 

SORTIE:

B 
0
class Rushee: 
    def get_model_name(self): 
     return "return something" 


class Other: 
    def __init__(self): 
     self.rushee = Rushee() 

    def class_name(self): 
     return self.rushee.__class__.__name__ 


if __name__ == "__main__": 
    other = Other() 
    other.class_name()