IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Heritage de la classe str


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut Heritage de la classe str
    Bonjour,

    J'ai une petite question car je n'ai pas trouvé la solution en recherchant sur le forum:

    lorsqu'on fait une classe héritant de la classe str comme ça :

    faut il faire une __init__ ? celui de str est fait directement ?

    Et à quels moments sont fait initialisation et instanciation ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    Bonjour,

    voici un petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MyString1(str):
        def __init__(self,*args,**kwargs):
            str.__init__(self,*args,**kwargs)
     
    class MyString2(str):
        pass
     
    s1 = MyString1('Hello ! (1)')
    print s1, type(s1)
    s2 = MyString2('Hello ! (2)')
    print s2, type(s2)

  3. #3
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour,
    Pour les objets immuables il me semble qu'il faille utiliser __new_

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class MyString1( str ):
        def __new__(cls,*args,**kwargs):
            return str.__new__( cls, *args,**kwargs )
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    Justement c'est pas aussi simple car str est un type built-in 'immutable' !

    dans ce que tu me propose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str.__init__(self,*args,**kwargs)
    ne sert à rien et n'est pas executé

    Pour faire de l'héritage de cette classe (Subclassing built-in types) il faut utiliser __new__ comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class myString (str):
     
        def __new__ (cls, value = 'bonjour'):
            print "passe dans l'init"
            return str.__new__(str, value)
     
    res = myString()
    print isinstance(res, str)
    print res
    Valable depuis python 2.2 voir :

    http://www.python.org/download/releases/2.2/descrintro/

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    exact,

    pas la peine d'appeler le __init__ de str alors.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/01/2008, 11h26
  2. probleme d'heritage entre 2 classes
    Par Shrine dans le forum C++
    Réponses: 6
    Dernier message: 11/08/2007, 22h27
  3. Heritage par sous classe avec discriminateur
    Par hipchic dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/01/2007, 19h51
  4. Heritage de plusieur classes
    Par JiJiJaco dans le forum Langage
    Réponses: 10
    Dernier message: 26/12/2005, 19h12
  5. [heritage] etendre une classe interne en dehors du package
    Par ChristopheH dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2004, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo