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 :

Méthodes privées: pratique courant en Python


Sujet :

Python

  1. #1
    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 Méthodes privées: pratique courant en Python
    Bonjour,

    Je découvre Python après m'être surtout intéressé à C++ et Java. C'est un des langages les plus agréables à programmer que j'aie rencontré. Un bémol toutefois, il semble difficile de restreindre l'accès aux champs et méthodes.

    Le mécanisme de "mangling" proposé par Python (__variable) semble permettre de restreindre l'accès d'un champ ou d'une méthode. Il est toutefois possible d'accéder aux champs protégés par _objet__variable.

    Quelle est la pratique courante en Python? Rendez-vous tous vos champs privés en utilisant le mécanisme ci-dessus? Programmez-vous des accesseurs pour accéder aux champs privés de vos classes?

    J'ai lu quelque que ce n'était pas une pratique courante de programmer des accesseurs en Python et qu'on préfère généralement accéder directement aux différents champs d'une classe. Avec C++ et Java, j'ai pris l'habitude de travailler avec un masquage maximal des données. Pensez-vous que c'est un excès de zèle?

    Salutations

    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++

    +

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    c'est vrai que quand on vient de C++ ou Java, on est désorienté par le type d'encapsulation très souple qu'offre Python.

    S'il est crucial que des attributs restent absolument privés, il y a quand même une possibilité : implémenter la méthode __getattr__, et lui faire contrôler si l'accès à l'attribut est autorisé ou non. Evidemment, au prix d'une petite baisse de performances.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  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
    Merci beaucoup,

    __getattr__ est une fonctionnalité qui m'avait échappé et je vais essayer d'en savoir plus au sujet de son exploitation.

    Meilleures salutations

    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 à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Si tu veux controler ce qu'un module exporte, tu peux aussi regarder du coté de la variable __all__ :

    The public names defined by a module are determined by checking the module's namespace for a variable named __all__; if defined, it must be a sequence of strings which are names defined or imported by that module. The names given in __all__ are all considered public and are required to exist. If __all__ is not defined, the set of public names includes all names found in the module's namespace which do not begin with an underscore character ("_"). __all__ should contain the entire public API. It is intended to avoid accidentally exporting items that are not part of the API (such as library modules which were imported and used within the module).
    http://www.python.org/doc/2.4.2/ref/import.html

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/03/2007, 20h25
  2. Réponses: 4
    Dernier message: 17/03/2007, 01h06
  3. setTimeout avec une méthode privée
    Par Erakis dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 29/06/2006, 10h47
  4. C objet: pratique courante?
    Par Thierry Chappuis dans le forum C
    Réponses: 13
    Dernier message: 07/02/2006, 12h22
  5. Réponses: 8
    Dernier message: 04/06/2004, 09h13

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