Python étendre avec l'aide de super() de Python 3 vs Python 2

À l'origine, je voulais vous demander cette question, mais ensuite j'ai trouvé qu'il y avait déjà pensé avant...

Recherche sur google, j'ai trouvé cet exemple de l'extension de configparser. Les œuvres suivantes avec Python 3:

$ python3
Python 3.2.3rc2 (default, Mar 21 2012, 06:59:51) 
[GCC 4.6.3] on linux2
>>> from configparser import  SafeConfigParser
>>> class AmritaConfigParser(SafeConfigParser):
...     def __init_(self):
...         super().__init__()
... 
>>> cfg = AmritaConfigParser()

Mais pas avec Python 2:

>>> class AmritaConfigParser(SafeConfigParser):
...       def __init__(self):
...           super(SafeConfigParser).init()
... 
>>> cfg = AmritaConfigParser()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
TypeError: must be type, not classob

Puis j'ai lu un peu sur le langage Python Nouvelle Classe contre Classe Ancienne styles (par exemple,ici.
Et maintenant je me demande, je peux le faire:

class MyConfigParser(ConfigParser.ConfigParser):
      def Write(self, fp):
          """override the module's original write funcition"""
          ....
      def MyWrite(self, fp):
          """Define new function and inherit all others"""

Mais, je ne devrais pas appeler init? Est-ce en Python 2 l'équivalent:

 class AmritaConfigParser(ConfigParser.SafeConfigParser):
    #def __init__(self):
    #    super().__init__() # Python3 syntax, or rather, new style class syntax ...
    #
    # is this the equivalent of the above ? 
    def __init__(self):
        ConfigParser.SafeConfigParser.__init__(self)
  • Dans votre exemple, vous n'avez pas besoin de définir un __init__() dans la sous-classe si elle ne fait appel de la super-classe' __init__() (en Python 2 ou 3) -- au lieu de cela, laissez le super est être héritée.
  • Référence utile: amyboyle.ninja/Python-l'Héritage
  • Référence utile avec corrigé le lien: amyboyle.ninja/Python-l'Héritage
InformationsquelleAutor Oz123 | 2012-05-07