Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] Découper son code

Sujet résolu
    27 février 2012 à 11:59:19

    Bonjour à tous,

    J'ai écris un programme et vu qu'il commence à être un peu long j'aimerais le découper en plusieurs fichiers.

    J'ai pris un exemple du tuto python avec deux fichiers:


    Le premier multipli.py
    def table(nb, max=10):
        i = 0
        while i<max:
        print(i+1 , "*" , nb , "=" , (i+1)*nb)
        i += 1
    


    et le second test.py:
    import os
    from multipli import *
    
    table(3, 20)
    os.system("pause")
    


    Ce code marche nickel mais j'aimerais encapsuler ma fonction dans une classe.

    J'ai donc "naturellement(?)" essayé ceci:

    class classe():
        def table(nb, max=10):
            """Fonction affichant la table de multiplication par nb de
            1 * nb jusqu'à max * nb
            """
            i = 0
            while i<max:
                print(i+1 , "*" , nb , "=" , (i+1)*nb)
                i += 1
    


    et

    import os
    from multipli import *
    
    # test de la fonction table
    test = classe()
    test.table(3, 20)
    os.system("pause")
    


    Mais cela me retourne une erreur:

    test.table(3, 20)
    TypeError: table() takes at most 2 arguments (3 given)


    Je pense que je fais une petite erreur mais je n'arrive pas à voir où.

    Merci d'avance!

    Fabien
    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2012 à 12:07:51

      Citation

      Ce code marche nickel mais j'aimerais encapsuler ma fonction dans une classe.



      Pour quelle raison ?
      Dans ce cas là, je ne vois absolument aucune utilité à faire ça.

      Sinon, si ta fonction devient une méthode (non-statique) d'une classe, elle sera appelée avec en premier argument l'instance de l'objet dont tu appelles la méthode, (le fameux self), donc Python râle puisque tu n'as pas adapté la définition de ta fonction pour prendre self en compte.

      Du reste, au niveau du code de la fonction en lui-même :

      def table(nb, maxi=10):
          for i in range(1, maxi+1):
              print(i , "*" , nb , "=" , i*nb)
      
      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
      Anonyme
        27 février 2012 à 12:24:09

        Je plussoie Nohar

        Se mettre aux classes alors qu'on ne sait pas qu'une boucle for est nettement souhaitable à la boucle while c'est risqué.

        Cependant ton erreur est l'oubli d'un self dans ta méthode table

        def table(self, nb, max=10):
        


        Ce qui donne pour un code correct

        class classe():
            def table(self, nb, max=10):
                """Fonction affichant la table de multiplication par nb de
                1 * nb jusqu'à max * nb
                """
                for i in range(1, max+1):
                    print(i , "x" , nb , "=" , i*nb)
        


        Comme le signale si bien nohar

        • Partager sur Facebook
        • Partager sur Twitter

        [Python] Découper son code

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown