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

Vue hybride

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    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.

  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,

    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    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 é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
    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

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    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

  6. #6
    Expert confirmé
    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 : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    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)

  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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    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 éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

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

+ 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