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 :

Surcharge d'une propriété : property() VS @property


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut Surcharge d'une propriété : property() VS @property
    Bonjour

    Dans une classe dérivée, je souhaite "surcharger" une propriété de la classe parente.
    Pour définir la propriété dans la classe dérivée, j'ai besoin d'accéder à la propriété de la classe parente (mon cas réel est moins simpliste que l'exemple ci-dessous !).

    Je n'y suis arrivé qu'en utilisant la fonction property car là, pour le coup, j'appelle une méthode tout bête de la classe mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class Mere(object):
     
        def __init__(self,compA,compB):
            self._compA = compA
            self._compB = compB
     
        def get_somme(self):
            return self._compA + self._compB
        somme = property(get_somme)
     
    class Fille(Mere):
     
        def __init__(self,compA,compB,compC):
            Mere.__init__(self,compA,compB)
            self._compC = compC
     
        def get_somme_ou_autre_nom(self):
            return Mere.get_somme(self) + self._compC
        somme = property(get_somme_ou_autre_nom)
    Est-ce possible de faire quelque chose d'équivalent si, dans la classe parente, la propriété a été définie via le décorateur @property ?
    J'ai essayé différentes syntaxes pour utiliser la propriété de la classe parente mais sans succès ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class Mere(object):
     
        def __init__(self,compA,compB):
            self._compA = compA
            self._compB = compB
     
        @property
        def somme(self):
            return self._compA + self._compB
     
    class Fille(Mere):
     
        def __init__(self,compA,compB,compC):
            Mere.__init__(self,compA,compB)
            self._compC = compC
     
        @property
        def somme(self):
            return  ?????  + self._compC

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,
    Je vous suggère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class A(object):
        def __init__(self):
            self._value = 1
     
        @property
        def value(self):
            return self._value
     
    class B(A):
        @property
        def value(self):
            return super(B, self).value + self._value + 1
     
    b = B()
    print b.value
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    super ! (forcément) - merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/06/2014, 10h53
  2. Réponses: 2
    Dernier message: 01/12/2011, 19h50
  3. Réponses: 6
    Dernier message: 09/09/2010, 13h58
  4. Réponses: 7
    Dernier message: 29/06/2007, 13h19
  5. Réponses: 6
    Dernier message: 30/11/2006, 18h15

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