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 :

Portée des variables de classe


Sujet :

Python

  1. #21
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 894
    Points : 7 250
    Points
    7 250
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> var = [5]
    >>> def setVar(n):
    ...     var[0] = n
    ... 
    >>> setVar(2)
    >>> var
    [2]

  2. #22
    Membre régulier Avatar de Pierrot92320
    Homme Profil pro
    Ingénieur en retraite (électronique)
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur en retraite (électronique)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bon je reviens avec la documentation, qui est claire
    Merci Fred. J'ai bien compris maintenant ce mécanisme concernant les espaces de noms et la portée des variables.

    Sur mon dernier message je demandais juste pourquoi on voit écrit sur certains livres que "les variables définies à l'extérieur d'une fonction ne peuvent pas être modifiés par la fonction". En fait ceci est faux. Ou du moins incomplet. Il faut dire : "une fonction ne peut modifier, par affectation, la valeur d'une variable extérieure à son espace local."

    Je m'intéressais plutôt aux classes et instances, mais le mécanisme est similaire.

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 326
    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 326
    Points : 36 844
    Points
    36 844
    Par défaut
    Salut,

    Citation Envoyé par Pierrot92320 Voir le message
    Et non les 4 sont vraies. Le seul problème est que ce qui est écrit dans le manuel est incomplet.

    J'ai trouvé l'explication sur un site pourtant réputé pour être zéro. Je cite : une fonction ne peut modifier, par affectation, la valeur d'une variable extérieure à son espace local.
    Le tuto du Swinnen, dans le chapitre que vous citiez au début, racontait cela en écrivant:
    Vous avez appris également que les instructions se trouvant à l'intérieur d'une fonction peuvent accéder aux variables définies au niveau principal, mais en consultation seulement : elles peuvent utiliser les valeurs de ces variables, mais pas les modifier (à moins de faire appel à l'instruction global).
    Et c'est ce qu'on a essaye de vous faire partager dans les différents posts.
    - W

  4. #24
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    J'interviens pour corriger ceci:
    A la lumière de ce que m'a expliqué chticricri plus haut, voici comment je vois les choses :

    L'objet obj1 se voit automatiquement attribuer une copie de la variable de classe var1 lors de son instanciation. Cette copie est une variable d'instance de obj1 et s'appelle aussi var1, mais elle n'est pas dans le même espace de noms. On peut donc théoriquement modifier la variable d'instance var1, sans que cela ne modifie la variable de classe var1.
    Non. Simplement quand tu écris obj1.var1 (un accès en lecture), Python regarde d'abord s'il existe un attribut d'instance var1 dans obj1. Si ce n'est pas le cas, il regarde alors dans la classe de obj1 s'il n'y a pas un attribut de classe nommé var1, et retourne alors sa valeur.

    Par contre, quand tu écris obj1.var1 = ..., il crée (ou modifie) un attribut d'instance var1 dans obj1, sans même regarder s'il y a un attribut de classe du même nom. Et les futurs accès à obj1.var1 concerneront donc l'attribut d'instance, comme expliqué ci-dessus.

    L'attribut de classe n'est pas copié automatiquement en attribut d'instance, ce dernier est créé par une assignation (comme n'importe quelle variable en Python).

  5. #25
    Membre régulier Avatar de Pierrot92320
    Homme Profil pro
    Ingénieur en retraite (électronique)
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur en retraite (électronique)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par dividee Voir le message
    L'attribut de classe n'est pas copié automatiquement en attribut d'instance, ce dernier est créé par une assignation (comme n'importe quelle variable en Python).
    D'accord. Merci beaucoup dividee pour cet éclaircissement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Débutant] Portée des variables dans une classe
    Par Jah73 dans le forum VB.NET
    Réponses: 24
    Dernier message: 10/10/2013, 14h55
  2. Portée des variables entre classes
    Par Gnifrus dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/03/2013, 14h37
  3. [POO] Portée des variables de classe
    Par guidav dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2007, 19h27
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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