2010-07-15 6 views
0

Dans django, je voudrais faire référence à la classe dont la méthode est appelée, où la méthode elle-même est implémentée dans son abstract ancestor.Django - Introspect django Modèle dans une méthode implémentée dans son ancêtre abstrait?

class AbstractFather(models.Model): 
    class Meta: 
     abstract = True 
    def my_method(self): 
     # >>> Here <<< 

class Child(AbstractFather): 
    pass 

Je cherche à faire quelque chose comme:

isinstance(instance, Child): 

Bien sûr, je ne peux pas savoir dans quel modèle ma_methode de l'enfant a été appelé a priori.

+0

pourriez-vous préciser? Êtes-vous en train de dire que self.childmethod() ne fonctionne pas? et quelle est la raison pour laquelle vous le structurez de cette manière? – eruciform

+0

self dans my_method est en fait l'instance de l'enfant, comme AbstractFather est ... abstract :) – Jonathan

Répondre

0

Trivial et travaux:

class AbstractFather(models.Model): 
    class Meta: 
     abstract = True 
    def my_method(self,some_instance): 
     print isinstance(some_instance,self.__class__) 

class Child(AbstractFather): 
    pass 
0

Pourquoi dites-vous cela? Vous pouvez absolument. AbstractFather est un modèle abstrait, donc il ne sera jamais instancié, donc vous pouvez toujours être sûr que tout ce qui appelle my_method est une instance d'une sous-classe. La syntaxe que vous donnez devrait fonctionner.

Modifier Alors, qu'est-ce que vous essayez de comparer exactement? self dans my_method sera toujours l'instance pertinente, et sa classe sera toujours la sous-classe spécifique de AbstractFather. Qu'est-ce que vous avez besoin de vérifier?

+0

Ce que je voulais dire, c'est que je ne devrais pas coder en dur Child dans AbstractFather car il y a effectivement Child1, Child2, etc ... dans ce sens a priori AbstractFather n'est pas au courant de ses enfants. – Jonathan

Questions connexes