J'ai donc une Superclasse (que j'appellerai pour simplifier), Mammal, dont les classes Dog, Monkey et Bear héritent des méthodes. Certaines méthodes héritées renvoient un objet qui doit être de la même classe que celle à laquelle il est appelé. Par exemple, Dog.find(...)
doit renvoyer des objets Chien. Mais parce que la méthode find()
est héritée de Mammal, la méthode ne peut pas être codée explicitement return Dog(...)
. Il doit être capable de renvoyer des objets Chien, Singe, Ours ou Mammifère, en fonction de la valeur self.__class__.__name__
.Renvoyer un objet basé sur __class __.__ name__ en Python
Je l'ai réalisé avec return eval(self.__class__.__name__)(...)
, mais je préfère éviter d'utiliser eval. Y a-t-il un meilleur moyen?
Pourquoi exactement voulez-vous demander à un chien afin de trouver un autre chien? Quel est le processus par lequel la valeur de retour est déterminée? (Est-ce que 'trouver' est vraiment un nom raisonnable pour la méthode?) –
C'est un bon point. Je suis d'accord c'est un peu gênant. C'est fondamentalement un modèle d'un framework MVC. Je peux instancier des objets Chien à partir des lignes d'une table DB, faire des choses comme 'dog.name = 'Rex'' puis' dog.save() 'pour le mettre à jour dans la table. Cela me laisse besoin d'une classe qui peut renvoyer des objets Chien en fonction des conditions de recherche, mais j'ai l'impression que c'est trop spécial pour que la classe de l'encapsuleur DB puisse le faire. Je ne suis pas le meilleur en design de classe. – nren