2010-08-17 3 views
3

Ceci est mon premier message, donc tout d'abord, je tiens à dire un géant "Merci!" à la communauté de stackoverflow pour tout le temps une réponse a fait le tour pour moi :)Problème avec l'héritage et "self" de référence

J'ai un problème en traitant de l'héritage de python.

I ont une classe parent qui contient le code suivant:

def start(self): 

    pid = os.fork() 

    if (pid==0): 
    self.__do_in_forked_process() 
    elif(pid > 0): 
    self.__do_in_parent_process() 
    else: 
    print ("Error while forking...") 
    sys.exit(1) 

Procédé __do_in_forked_process() contient un self.__manage_request() qui est défini dans la classe parent et substituée dans la classe enfant.

Dans la classe enfant, lorsque j'utilise la méthode self.start(), le problème survient: la méthode self .__ manage_request() exécutée est celle définie dans la classe parente au lieu de la méthode define dans la classe enfant (même si, supposons, quand je fais self.start(), que la méthode start et toutes les choses qui s'y trouvent fassent référence à l'objet enfant plutôt qu'à l'objet parent).

Merci d'avance!

turkishweb

Répondre

6

Ne pas utiliser DEUX traits de soulignement dans votre méthode et d'autres noms d'attributs: ils sont spécifiquement destiné à isoler les classes parent de sous-classes, ce qui est certainement ce que vous faites pas veux ici! Renommez la méthode en question à _manage_request (soulignement unique) tout au long, et vivez heureux pour toujours. Et dans le futur, utilisez des traits de soulignement doubles seulement quand vous êtes absolument certain vous ne voudrez jamais de surcharger (ou acess de méthodes de sous-classe) de cet attribut (méthode étant juste un cas spécial d'attribut).

Dans la terminologie C++, les traits de soulignement principaux simples protected: les sous-classes sont autorisées et acceptées pour accéder et redéfinir. Les doubles traits de soulignement moyens signifient private: signifiaient être sans intervention même pour les sous-classes (et avec un nom de compilateur pour l'aider à le faire). J'ai rarement l'air double soulignement utilisé avec un but clair et la compréhension de cela.

+0

Vous êtes le meilleur! merci beaucoup, maintenant ça marche comme un charme! :) – turkishweb

+0

Vous avez de la chance. Votre première question a été répondue par l'un des experts python les plus éminents du monde. – Odomontois

Questions connexes