2010-01-30 5 views
2

Je veux être en mesure de sous-classer une classe, et de définir __init__ mais toujours exécuter l'ancien __init__.Polymorphisme - Ajout à des méthodes existantes en les écrasant

Pour illustrer, disons que j'ai les classes suivantes:

class A(object): 
    def __init__(self): 
     self.var1 = 1 

class B(A): 
    def __init__(self) 
     self.var2 = 2 
     doInitForA() 

Et je veux être en mesure de le faire:

instB = B() 
print (instB.var1) #1 
print (instB.var2) #2 

Edité comme Ignacio Vazquez-Abrams suggéré. (Est-il possible d'éditer sans se cogner contre?)

+0

Édité pour se conformer à PEP 8 et utiliser une nouvelle classe de style. – bernie

+0

@Adam: Ne modifiez pas la question d'une manière qui change les réponses potentielles. Laissez le code tel qu'il a été écrit par l'OP. –

+0

@Ignacio: Je suis d'accord. Merci pour le retour en arrière. @wallacoloo: pensez à modifier votre code pour qu'il soit conforme à PEP 8 et utilisez des classes de style nouveau. – bernie

Répondre

0

Soit appeler a.__init__(self) ou qui réalisent a de object et utiliser super().

0
class a: 
    def __init__(self): 
     self.var1 = 1 

class b(a): 
    def __init__(self) 
     self.var2 = 2 
     a.__init__(self) 

Vous pouvez même écrire super().__init__() si vous utilisez python 3.
Voir this question sur l'utilisation de super().

0

Appelez le responsable de votre père depuis votre poste: a.__init__(self). Notez que vous devez passer self comme premier paramètre. Si le parent c'tor prend plus de paramètres, transmettez-les après self.

6

remplacer

doInitForA() 

avec

super(b, self).__init__() 
Questions connexes