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 de méthode


Sujet :

Python

  1. #1
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut méthodes de méthode
    bonjour, je me demande s'il est possible de créer des méthode dans une méthode.
    je m'explique.
    En C#, on peu créer des accesseurs qui permet d'obtenir le contenu d'une variable ou de la modifier en fonction de la maniére dont on utilise la méthode.
    j'aimerai reproduire ce comportement en python.

    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def accesMaVar(self):
         def setMaVar(self):
              return self.MaVar
         def getMaVar(self,value):
              self.MaVar=value
    seulement, ca ne fonctionne pas. Alors je me demande si cela est possible?
    merci.

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559

  3. #3
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Foo:
      def __init__(self):
        self.bar = 'bar'
     
    foo = Foo()
    foo.bar # => 'bar'
    foo.bar = 'baz'
    foo.bar # => 'baz'

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    Voici pourquoi je pose cette question, si qqu'un peut m'expliquer.

    bout de code extrait dufichier Image.py de la bibliothèque PIL
    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
    21
    22
    23
    def rotate(self, angle, resample=NEAREST, expand=0):
            "Rotate image.  Angle given as degrees counter-clockwise."
    
            if expand:
                import math
                angle = -angle * math.pi / 180
                matrix = [
                     math.cos(angle), math.sin(angle), 0.0,
                    -math.sin(angle), math.cos(angle), 0.0
                     ]
                def transform(x, y, (a, b, c, d, e, f)=matrix):
                    return a*x + b*y + c, d*x + e*y + f #### c'est bien une fonction encapsulé dans une autre, non !!?
    
                # calculate output size
                w, h = self.size
                xx = []
                yy = []
                for x, y in ((0, 0), (w, 0), (w, h), (0, h)):
                    x, y = transform(x, y)
                    xx.append(x)
                    yy.append(y)
                w = int(math.ceil(max(xx)) - math.floor(min(xx)))
                h = int(math.ceil(max(yy)) - math.floor(min(yy)))

  5. #5
    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
    Regarde le lien de anthyme. Ce que tu veux faire se faire avec les property.

    Dans le bout de code de PIL, il s'agit simplement d'une fonction locale à une autre

  6. #6
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Oui, tu peux faire des fonctions "nested":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def foo():
      def square(x):
        return x * x
      print "Hello!", square(9)
     
    foo() # => "Hello! 81"
    Mais c'est pas la même chose que des propriétés.

  7. #7
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    ok, je comprend bien le truc maintenant.

    ce type de fonction permet de découper les traitements d'une fonction en sous fonction appellable dans la fonction elle même, mais inaccessible de l'extérieur. C'est bien ca !?
    Ca permet de réduire la redondance de code dans une même fonction!

    Pour ce qui est de ce que je veux faire pour mon objet, c'est compris, puisque je le faisais déjà, je voulais juste savoir si l'on pouvait faire plus condenser...

    merci

  8. #8
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    un petit post supplémentaire pour soumettre une méthode qui me permet de n'avoir qu'une méthode d'accés au données d'un objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def accesFond(self,type,value=None):
            if type=='r':
                return self.canvas['bg']
            elif type=='w':
                if value!=None:
                    try:
                        self.canvas['bg']=value
                    except:
                        return 
                else:
                    return "ERREUR aucune valeur"
    ++

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

Discussions similaires

  1. 2 méthodes = 1 méthode, comment ?
    Par Gébix dans le forum C++
    Réponses: 5
    Dernier message: 04/03/2011, 12h15
  2. Forme d'appel de méthode réservé méthodes de classe
    Par Chicobrasil dans le forum Langage
    Réponses: 16
    Dernier message: 03/01/2006, 17h43
  3. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

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