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éthode static est python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut Méthode static est python
    Bonjour,

    Je suis formé en java mais je m'intéresse depuis peu à python pour son côté libre, open source est la richesse des api qu'on peut trouver.

    Je souhaitais mettre une méthode de class (équivalant à static en java) dans la classe suivante mais python semble ne pas comprendre.

    J'ai fais quelques recherches sur seek.fr mais rien de satifaisant.


    Voici le code.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
     -*- coding: latin-1 -*-
    '''
     
    # ce code pourrait faire partie d'un logiciel libre payant open source GPL chaque personne pourrait ou non ce faire pyer pour le travail sur son code.
    # Ce code serait distribuer en open source dans l'espoir qu'il serait am�lior� et maintenu par une communaut� motiv�e et afin que le programme
    # qui en r�sulte ne meure si possible jamais.
     
     
     
    Created on 11 févr. 2015
     
    @author: Battant
    '''
     
     
    import logging, logging.handlers
    from PyQt4.QtGui import *
    from mainmenu import mainmenu
     
    import sys
     
    '''
    Cette classe va démarrer le programme de facturation  billmanagee
    '''
    class Starter :
     
        verbose = False
     
     
    #La méthode prepareLogFile fait le nécessaire pour préparer le journal de débugage et d'erreur
     
        def prepareLogFile(cls) :
            Starter.logfile.vl = logging.DEBUG
            Starter.logfile = "billManagerOutput.log"
            Starter.logfile.basicConfig (filename = Starter, filemode='a', format = Starter.form ,level= Starter.logfile.lvl)
            Starter.file_handler = Starter.logging.handlers.RotatingFileHandler(Starter.logfile, backupCount=7,
                                                                                encoding='utf-8')
            Starter.file_handler.setFormatter(logging.Formatter(Starter.form))
            Starter.logger.addHandler(Starter.file_handler)
     
     
     
     
     
    if __name__=='__main__':
            Starter.app = QApplication(sys.argv)
            Starter.prepareLogFile()
            print ('session principale')
            if '-v' in sys.argv :
                verbose = True
    if verbose :
           logging.debug ('session principale')
           logging.debug ('construction mainmenu')
    window = mainmenu.MainMenu()
    window.show()
    if verbose :
            Starter.logging.debug ('mainmenu construit')
     
    sys.exit(Starter.app.exec_())
    et Mainmenu

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #!/usr/bin/env python
    # -*- coding: latin-1 -
    # Auteur Battant
     
    # ce code pourrait faire partie d'un logiciel libre payant open source GPL chaque personne pourrait ou non ce faire pyer pour le travail sur son code.
    # Ce code serait distribuer en open source dans l'espoir qu'il serait am�lior� et maintenu par une communaut� motiv�e et afin que le programme
    # qui en r�sulte ne meure si possible jamais.
     
    import logging, logging.handlers
    from PyQt4.QtGui import *
     
    import sys
     
     
    class MainMenu (QWidget) :
     
     
     
        def __init__(self, parent=None) :
            QWidget.__init__(self, parent)
            self.clients = QPushButton('Clients',self)
            self.prestations = QPushButton ('Prestations',self)
            self.factures = QPushButton ('Facture',self)
            self.agenda = QPushButton ('agenda',self)
            self.Quitter = QPushButton('Quitter',self)
            self.configEvent()
            self.setWindowTitle('Menu principal')
            self.menuLayout = QBoxLayout()
            self.menuLayout.addWidget(self.clients)
            self.menuLayout.addWidget(self.prestations)
            self.menuLayout.addWidget(self.factures)
            self.menuLayout.addWidget(self.agenda)
            self.setLayout(self.menuLayout)    
            #quitLayout = QHBoxLayout()
            #quitLayout.addWidget(Quitter)
     
            self.menuLayout.addWidget(self.Quitter)
     
        def configEvent(self) :
     # code de  VinsS de developpez.com
            self.Quitter.clicked.connect(quit)
    Question :

    Pourquoi python ne comprend pas que cette méthode qui est static =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Starter.prepareLogFile()
    Exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Traceback (most recent call last):
      File "Starter.py", line 48, in <module>
        Starter.prepareLogFile()
    TypeError: unbound method prepareLogFile() must be called with Starter instance as first argument (got nothing instead)

    Merci pour votre aide

    Salutations

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Essayez ceci :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    class MyClass:
     
        # membre de classe
        INSTANCE_COUNTER = 0
     
        def __init__ (self):
            """
                constructeur de classe; ici @self est le pointeur de
                l'instance (objet) en cours d'utilisation;
            """
            # member inits
            self.attr1 = None
            self.attr2 = "hello"
            self.attr3 = 3
        # end def
     
     
        @classmethod
        def get_new_instance_number (cls):
            """
                méthode de classe; ici @cls est la classe elle-même
                (typecast);
            """
            # next instance number
            cls.INSTANCE_COUNTER += 1
            return cls.INSTANCE_COUNTER
        # end def
     
     
        @staticmethod
        def my_static_method (arg1, arg2, arg3):
            """
                méthode 'static'; ici @arg1...3 sont des arguments
                quelconques;
            """
            print "méthode static :", arg1, arg2, arg3
        # end def
     
    # end class MyClass
     
    # ===========================   DEMO   =================================
     
    # utilisation de la classe SANS instance (objet)
    # appel d'une méthode static
    MyClass.my_static_method("hello", "good", "people!")
     
    # on peut appeler aussi une méthode de classe SANS instance
    print "instance numéro (classe) :", MyClass.get_new_instance_number()
     
    # utilisation de la classe AVEC une instance (objet)
    # ici l'objet s'appelle my_class et la classe s'appelle MyClass
    my_class = MyClass()
     
    # attributs de l'objet my_class
    print "attributs objet :", my_class.attr1, my_class.attr2, my_class.attr3
     
    # on peut appeler une méthode de classe avec une instance (objet my_class)
    print "instance numéro (objet) :", my_class.get_new_instance_number()
     
    # on peut aussi appeler une méthode static avec une instance (objet my_class)
    my_class.my_static_method("ça", "marche", "aussi comme ça")
    N'hésitez pas à compulser la doc officielle de Python : https://docs.python.org/3/library/index.html

    Bon courage.

    @+.

Discussions similaires

  1. Réponses: 9
    Dernier message: 27/05/2009, 16h08
  2. Réponses: 9
    Dernier message: 12/04/2007, 17h08
  3. [FLASH MX2004] [AS2] Classe méthodes static
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 16/12/2004, 18h26
  4. [debutant] Méthode static
    Par iago dans le forum Langage
    Réponses: 12
    Dernier message: 25/11/2004, 17h09
  5. thread et méthodes static
    Par sylpichard dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 17h12

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