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 :

héritage de "object"


Sujet :

Python

  1. #1
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut héritage de "object"
    Bonjour à tous,

    Cela fait quelques temps que je travaille avec Python et je me pose une question:
    quelle est la différence entre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class MaClasse(object):
    ...
    et

    On m'a parlé de nouvelle version et blablabla... mais rien de très juste je pense.

    Merci d'avance.
    --
    Ludovic

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    dériver de "object" fait que ta classe sera une "new-style class".

    plutôt qu'un long discours voici un lien intéressant sur les avantages des "new-style class":

    http://www.geocities.com/foetsch/pyt...le_classes.htm

    Dans ce lien il manque des exemples sur les metaclasses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Toto
        pass
    class Titi(object)
        pass
    type(Toto)
    <type 'classobj'>
    type(Titi)
    <type 'type'>

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par kango Voir le message
    Dans ce lien il manque des exemples sur les metaclasses.
    Pourquoi? On peut à priori parler de classes nouveau style sans parler de métaprogrammation.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    OK.

    Merci pour l'article.
    Je comprends.

    Donc, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Test(object):
            def __init__(self, titi):
                    self.titi = titi
            def getTiti(self):
                    return self.titi
            def setTiti(self, v):
                    self.titi = v
            titi = property(getTiti,setTiti)
     
    Test(1)
    Lorsque j'execute cela, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ....
    File "test.py", line 7, in setTiti
        self.titi = v
      File "test.py", line 7, in setTiti
        self.titi = v
    RuntimeError: maximum recursion depth exceeded

    Par contre, lorsque je supprime "(object)".
    tout est ok.

    Je suis sur un centos5 avec Python 2.4.3

    Merci d'avance
    --
    Ludovic

  5. #5
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Il ne faut pas appeler ta propriété titi
    ou bien plutôt faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Test(object):
            def __init__(self, titi):
                    self._titi = titi
            def getTiti(self):
                    return self._titi
            def setTiti(self, v):
                    self._titi = v
            titi = property(getTiti,setTiti)
     
    Test(1)

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Pourquoi? On peut à priori parler de classes nouveau style sans parler de métaprogrammation.

    Thierry
    oui bien sûr, je n'utilise pas les metaclasses (un tort peut être) alors que j'utilise systématiquement les "new-style class".

    je soulignais juste que les "new-style class" permettent, aussi, de faire des metaclasses mais que cela n'est pas traité dans l'article

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Guigui_ Voir le message
    Il ne faut pas appeler ta propriété titi
    ou bien plutôt faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Test(object):
            def __init__(self, titi):
                    self._titi = titi
            def getTiti(self):
                    return self._titi
            def setTiti(self, v):
                    self._titi = v
            titi = property(getTiti,setTiti)
     
    Test(1)
    Personnellement, j'écrirais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Test(object):
            def __init__(self, titi):
                    self.titi = titi
     
    Test(1)
    On peut ainsi accéder directement accéder à la propriété titi des objets de type test. Si, maintenant, on veut implanter une politique d'accès plus évolué à la propriété titi, on passera par un accesseur et un mutateur, et par property().

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    Merci beaucoup pouir votre aide!
    --
    Ludovic

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

Discussions similaires

  1. onmouseover=&quot;Menu_HoverStatic(this)&quot; object expected
    Par cyrano_de_bergerac dans le forum ASP.NET
    Réponses: 0
    Dernier message: 01/10/2010, 16h01

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