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 :

est-ce que le underscore devant un nom de variable a un sens particulier ou c'est juste conventionnel ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 467
    Par défaut est-ce que le underscore devant un nom de variable a un sens particulier ou c'est juste conventionnel ?
    bonjour,

    je voudrais savoir si le underscore qu'on peut mettre devant un nom de variable a un sens, une incendice particulière ou pas ? est-ce juste conventionnel, une habitude de présentation ou bien est-ce que ça joue un rôle dans la visibilité, instanciation d'une variable ?

    je pose cette question car je suis en train de manipuler un webservice (.asmx) pas fait ni testé pour python, et comme ce WS possède des noms de champs/type avec un underscore devant je me pose des questions.
    Avec mon client soap (suds), je n'arrive pas à envoyer mon id de connexion dans ce WS qui comme par hasard possède un underscore devant le nom !
    Alors que les autres variables/type sans underscore j'arrive à les envoyer. !

    Voiç la description de la méthode fournie par le WS :
    EnvoiIntervenants(xs:string _IdConnexion, ArrayOfIntervenant _ListeIntervenant, )
    avec mon code çi-dessous j'arrive donc à envoyer l'intervenant mais pas l'id de connexion où la réponse de WS me dit qu'il est vide !!!!

    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
    client = Client(url)
    		print client	#pour voir schema global, definitions..Etc
     
    		Intervenant = client.factory.create('Intervenant')
    		print Intervenant
     
                    Intervenant.Matricule="TEST matricule"
    		Intervenant.Civilite=1
    		Intervenant.Prenom="TEST prenom"
    		Intervenant.Nom="TEST NOM"
    		Intervenant.TelPerso="TEST telperso"
    		Intervenant.CodePostal="TEST cp"
    		Intervenant.Ville="TEST ville"
    		Intervenant.Adresse="TEST adresse"
    		Intervenant.Suppression=False
     
    		try:
    			nouveau = client.service.EnvoiIntervenants("mon id",Intervenant)
    		except suds.WebFault, e:
    			print e

    Si quelqu'un a une idée........je planche dessus depuis plusieurs heures........

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    C'est plus effectivement par convention d'écriture. Cela signifie 'pas touche'/'interne' mais rien n’empêche l'utilisation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> class Foo(object):
    ...     _l = []
    ... 
    >>> Foo._l
    []
    @+

  3. #3
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Bonjour,
    Python met l'accent sur le bon sens des développeurs qui l'utilisent. Par convention on accède pas à un champs ou une méthode marqué d'un "_". On le pourrait, python ne nous ne l'interdit pas, mais on ne le fait pas. Python ne possède pas de public/private comme en java et en C++.
    On utilise normalement cette notation pour définir une propriété :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A:
        def __init__(self, a):
            self._a = a
     
        def _get_a(self):
            return self._a
     
        def _set_a(self, a):
            self._a= a
     
        a = property(_get_a, _set_a)
    L'utilisation de cette classe sera :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = A("Test")
    print a.a
    a.a = "Autre test"
    print a.a
    Désolé pour l'exemple bidon, mais j'espère que tu as compris.

    [EDIT]Grillé . Trop lent à répondre[/EDIT]

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Petit note quand même:
    _ empêche l'import

    Soit test.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class _interne():
        def __init__(self):
            pass
     
        def _myprint(self):
            print('pass')
     
    class Foo():
        def __init__(self):
            pass
     
        def look_interne(self):
            _i = _interne()
            _i._myprint()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from test import *
    >>> globals()
    {'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'Foo': <class 'test.Foo'>, '__doc__': None, '__package__': None}
    >>> f = Foo()
    >>> f.look_interne()
    pass
    @+

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Re,

    Voici ce que dit le PEP8 dans la partie Naming Conventions.

    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
        In addition, the following special forms using leading or trailing
        underscores are recognized (these can generally be combined with any case
        convention):
     
        - _single_leading_underscore: weak "internal use" indicator.  E.g. "from M
          import *" does not import objects whose name starts with an underscore.
     
        - single_trailing_underscore_: used by convention to avoid conflicts with
          Python keyword, e.g.
     
          Tkinter.Toplevel(master, class_='ClassName')
     
        - __double_leading_underscore: when naming a class attribute, invokes name
          mangling (inside class FooBar, __boo becomes _FooBar__boo; see below).
     
        - __double_leading_and_trailing_underscore__: "magic" objects or
          attributes that live in user-controlled namespaces.  E.g. __init__,
          __import__ or __file__.  Never invent such names; only use them
          as documented.
    @++

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Ceci dit, et bien que je l'utilise comme 'signalétique', cela vas qu'en même a l'encontre du fait qu'en Python on considère le développeur comme 'responsable'...

  7. #7
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 467
    Par défaut ok
    pour infos, concernant mon webservice *.asmx....

    j'ai contacté les responsables de la partie serveur, et m'ont fait une version sans les underscores devant les noms de propriété/méthode et....miracle ça marche maintenant avec SUDS...

    qui était le fautif : suds ou le webservice .net ?

    peu importe ça marche maintenant, en tout cas ce problème est réglé...

Discussions similaires

  1. underscore devant le nom d'une variable
    Par root76 dans le forum Langage
    Réponses: 23
    Dernier message: 12/06/2013, 13h31
  2. Est-ce que je peux utiliser certain symbole dans le nom de dossier
    Par pierrot10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/09/2007, 20h45
  3. Réponses: 7
    Dernier message: 08/03/2007, 09h23
  4. Qu'est-ce que N devant certaines string ?
    Par Foxtrot dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/10/2006, 23h09
  5. Que veut dire le "T" devant un nom de classe?
    Par Jhulk dans le forum Delphi
    Réponses: 5
    Dernier message: 08/06/2006, 08h39

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