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 :

TypeError et keyError avec une classe passant une constante en liste de Dictionnaires méthode de classe [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut TypeError et keyError avec une classe passant une constante en liste de Dictionnaires méthode de classe
    Hello team Python,

    Mayday.

    Je précise que je suis débutant sous Python (3.7.1) et j'apprend django (2.1.3) en même temps.
    je suis l'excellent tutorial (sous pythn 3.6) de "Honoré Hounwanou" de "les profs du net" ici (pour ceux qui connaissent) :

    J'en suis rendu à entre 1:18:00 et 1:22:00.

    A cette étape, le tuto nous guide pour créer la classe suivante (j'ai remis les noms des variables à ma sauce):

    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
     
    class Pays():
     
        # ici 'PAYS' est une "Constante de classe" dans une classe
        PAYS = [
            {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
            {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
            {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
            {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
            {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        ]
     
     
        classmethod
        def all(cls):
            return cls.PAYS
     
     
        classmethod
        def find(cls, id):
            return cls.PAYS[int(id)-1]

    La vue (ou le template) html code sensé exploiter cette classe est définie comme suit:

    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
     
     
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.shortcuts import render
    from .templates....classes.mocks import Pays
     
     
    # Create your views here.
     
    # # Dictionnaire test, à commeter suite à connexion à la BD
    # pays = [
    #     {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
    #     {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
    #     {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
    #     {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
    #     {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
    # ]
     
    def home(request):
        pays = ['1. Gabon', '2. France', '3. Sénégal','4. belgique', '5. Maroc']
        return render(request, '.../pages/home.html', {'pays': pays})
     
     
     
    def pays_liste(request):    
        pays =   Pays.all()
        return render(request, '.../pages/pays_liste.html', {'listepays': pays})
     
    def pays_details(request, id):
        payschoisi = Pays.find(id)
        return render(request, '.../pages/pays_details.html', {'payschoisi':str(payschoisi[int(id)]) })
    ... et j'obtiens une erreur de type "TYPEeRROR"

    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
     
    Environment:
     
     
    Request Method: GET
    Request URL: http://127.0.0.1:8000/.../pays/
     
    Django Version: 2.1.3
    Python Version: 3.7.1
    Installed Applications:
    ['django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     '....apps....']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']
     
     
     
    Traceback:
     
    File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\exception.py" in inner
      34.             response = get_response(request)
     
    File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response
      126.                 response = self.process_exception_by_middleware(e, request)
     
    File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response
      124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
     
    File "D:\Mes Projets\... projects\...\views.py" in pays_liste
      41.     pays =   Pays.all()
     
    Exception Type: TypeError at /..../pays/
    Exception Value: all() missing 1 required positional argument: 'cls'
    Je n'ai actuellement pas le niveau pour résoudre ce dysfonctionnement.

    J'ai tenté de déclarer les 2 méthodes de la classe sans le paramètres 'cls' :
    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
     
    class Pays():
     
        # ici 'PAYS' est une "Constante de classe" dans une classe
        PAYS = [
            {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
            {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
            {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
            {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
            {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        ]
     
     
        classmethod
        def all():
            return Pays.PAYS
     
     
        classmethod
        def find(id):
            return Pays.PAYS[int(id)-1]
    ... mais à ce moment j'obtiens un erreur de type "keyError" (ci-dessous), uniquement sur l'appel de la méthode
    find
    :

    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
     
    Environment:
     
     
    Request Method: GET
    Request URL: http://127.0.0.1:8000/.../pays/1
     
    Django Version: 2.1.3
    Python Version: 3.7.1
    Installed Applications:
    ['django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'smartview.apps....Config']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']
     
     
     
    Traceback:
     
    File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\exception.py" in inner
      34.             response = get_response(request)
     
    File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response
      126.                 response = self.process_exception_by_middleware(e, request)
     
    File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response
      124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
     
    File "D:\Mes Projets\... projects\.\views.py" in pays_details
      55.     return render(request, '.../pages/pays_details.html', {'payschoisi':str(payschoisi[int(id)]) })
     
    Exception Type: KeyError at /.../pays/1
    Exception Value: 1
    j'ai tenté la lecture de cet article sur , mais.. je ne suis pas prêt... besoin d'explications intercatives.

    Queqlu'un saurait-il m'aider à fixer cette erreur? je peux avancer et bypasser l'implémentation de la classe, vu que si je m'arrête à la déclaration d'une variable globale dans la vue, (views.py); le tout fonctionne, mais je souhaite vraiment fixer ce souci...

    Merci pour votre aide.


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

    Citation Envoyé par revealmap Voir le message
    Je n'ai actuellement pas le niveau pour résoudre ce dysfonctionnement.
    Essayez de revoir comment se déclare une méthode de classe...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bonjour wiztricks,

    Merci pour ton retour...
    je sais bien que "je dois" lire la documentation du langage (vraiment désolé), mais la je suis confronté à une certaine urgence.
    Si cela est envisageable pour vous, j'aurais bien aimé un support plus précis ...

    Ceci étant dit, voici ce que j'ai appris (ne pas hésiter à me corriger le cas échéant):

    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
        class NomClasse:
     
            # Atribut de classe : accessible et égal pour toutes les instances de la classe
            monAttriuClasse = ("je suis un atrubut de classe")
     
            # Constructeur
            def __init__ (self, c_param1, c_param2):
                self.param1 = c_param1
                self.param2 = c_param2
     
            # Méthodes d'instance : agissant sur une instance de la classe
            def maMethode1(self, c_param1, c_param2):
                pass
     
            # Méthode de classe
            def maMethodeclass(cls, c_action):
                self.param1 = c_action
                c_action = "Mon Action"
     
            maMethodeclass = classmethod(maMethodeclass())
     
            # Méthode statique
            def maMethodeStatique():
                print("ceci est une action de méthode statique")
    du coup,

    j'ai réadapté le code comme suit:

    1. code de la vue (pour MVT):

    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
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.shortcuts import render
    from .templates.MonApp.classes.mocks import Pays
     
     
    # Create your views here.
     
    # # Dictionnaire test, à commeter suite à connexion à la BD
    # pays = [
    #     {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
    #     {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
    #     {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
    #     {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
    #     {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
    # ]
     
     
     
     
    def pays_liste(request):
        # Dictionnaire test, à commeter suite à connexion à la BD
        #pays = [
            #{'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
            #{'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
            #{'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
            #{'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
            #{'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        #]
        pays =   Pays.all()
        return render(request, 'MonApp/pages/pays_liste.html', {'listepays': pays})
     
    def pays_details(request, id):
        # Dictionnaire test, à commeter suite à connexion à la BD
        # pays = [
        #     {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
        #     {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
        #     {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
        #     {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
        #     {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        # ]
     
        payschoisi = Pays.find(id)
        return render(request, 'MonApp/pages/pays_details.html',{'payschoisi': payschoisi[int(id)]} )
    2. code du template source (liste) , qui s'affiche correctement:
    Code HTML : 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
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Pays | MonApp</title>
    </head>
    <body>
        <h1>{{ listepays|length }} Pays | MonApp</h1>
        <ul>
            {% for p in listepays %}
            <pays>
                <li> <h2><a href="/MonApp/pays/{{ p.id }}">{{ forloop.counter}}  : {{ p.nom_pays|upper }} (ID: #{{ p.id }}) </a> </h2></li>
                <p><h3>{{ p.continent }} </h3></p>
                <p><a href="/MonApp/pays/{{ p.id }}">Lire la suite ...</a></p>
            </pays>
     
            {% if not forloop.last %}
                <hr>
            {% endif %}
            {% endfor %}
        </ul>
     
    </body>
    </html>

    3. code du template de destination (détails)
    Code HTML : 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
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>MonApp | Détails Pays</title>
    </head>
    <body>
        <h1>MonApp | Détails Pays : #{{ payschoisi.id }}-{{ payschoisi.nom_pays }} </h1>
        <hr>
        <ul>
     
            <pays>
                <li> <h2><a href="MonApp/pays/{{ payschoisi.id }}"> : {{ payschoisi.nom_pays|upper }} (ID: #{{ payschoisi.id }}) </a> </h2></li>
                <p><h3>Numéro id : {{ payschoisi.id }} </h3></p>
                <p><h3>Nom du pays: : {{ payschoisi.nom_pays }} </h3></p>
                <p><h3>Continent : {{ payschoisi.continent }} </h3></p>
                <p><h3>Autres informations: <a href="#">lire la suite....</a> </h3></p>
            </pays>
     
     
                <hr>
     
        </ul>
     
    </body>
    </html>

    4. Message d'error, cette fois-ci : "Keyerror":

    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
    Environment:
     
     
    Request Method: GET
    Request URL: http://127.0.0.1:8000/MonApp/pays/2
     
    Django Version: 2.1.3
    Python Version: 3.7.1
    Installed Applications:
    ['django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'MonApp.apps.MonAppConfig']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']
     
     
     
    Traceback:
     
    File "d:\Mes Projets\envMonExo\lib\site-packages\django\core\handlers\exception.py" in inner
      34.             response = get_response(request)
     
    File "d:\Mes Projets\envMonExo\lib\site-packages\django\core\handlers\base.py" in _get_response
      126.                 response = self.process_exception_by_middleware(e, request)
     
    File "d:\Mes Projets\envMonExo\lib\site-packages\django\core\handlers\base.py" in _get_response
      124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
     
    File "D:\Mes Projets\MonExo projects\MonApp\views.py" in pays_details
      55.     return render(request, 'MonApp/pages/pays_details.html',{'payschoisi': payschoisi[int(id)]} )
     
    Exception Type: KeyError at /MonApp/pays/2
    Exception Value: 2
    Comment fixer cette erreur de type "KeyError" ?
    Bien entendu, je cherche en parallèle.

    Merci encore pour votre aide.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Re,

    Bon, j'ai trouvé le souci... Erreur de débutant (que je suis), en ligne 45
    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
     
     
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.shortcuts import render
    from .templates.MonApp.classes.mocks import Pays
     
     
    # Create your views here.
     
    # # Dictionnaire test, à commeter suite à connexion à la BD
    # pays = [
    #     {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
    #     {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
    #     {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
    #     {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
    #     {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
    # ]
     
     
     
     
    def pays_liste(request):
        # Dictionnaire test, à commeter suite à connexion à la BD
        #pays = [
            #{'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
            #{'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
            #{'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
            #{'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
            #{'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        #]
        pays =   Pays.all()
        return render(request, 'MonApp/pages/pays_liste.html', {'listepays': pays})
     
    def pays_details(request, id):
        # Dictionnaire test, à commeter suite à connexion à la BD
        # pays = [
        #     {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'},
        #     {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'},
        #     {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
        #     {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'},
        #     {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        # ]
     
        payschoisi = Pays.find(id)
        return render(request, 'MonApp/pages/pays_details.html',{'payschoisi': payschoisi[int(id)]} )
    le paramètre transmis était incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        return render(request, 'MonApp/pages/pays_details.html',{'payschoisi': payschoisi[int(id)]}
    je l'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        return render(request, 'MonApp/pages/pays_details.html',{'payschoisi': payschoisi}
    et tout est rentré dans l'ordre.

    Oui, je ne suis pas encore familier du développement web et de la manipulation des requêtes Http, et j'apprend Python en même temps...
    ça fait beaucoup.

    encore merci.

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

    Citation Envoyé par revealmap Voir le message
    je sais bien que "je dois" lire la documentation du langage (vraiment désolé), mais la je suis confronté à une certaine urgence.
    Relisez comment sont construites vos méthodes de classe dans "ce que vous avez appris", et vérifiez que vous l'appliquez correctement dans la définition de votre classe Pays.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    rebonjour Wiztricks,

    dans mon post précédent, je crois que je n'ai pas indiqué le code réadapté pour mon module de classe, le voici:


    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
     
     
    from django.http import Http404
     
    class Pays():
     
        # Convention  Python:  ici 'PAYS'n est une "Constante de classe", d'où la mise en majuscule.
        PAYS = [
            {'id': 1, 'nom_pays': 'Gabon', 'continent': 'Afrique'},
            {'id': 2, 'nom_pays': 'France', 'continent': 'Europe'},
            {'id': 3, 'nom_pays': 'Sénégal', 'continent': 'Afrique'},
            {'id': 4, 'nom_pays': 'Belgique', 'continent': 'Europe'},
            {'id': 5, 'nom_pays': 'Maroc', 'continent': 'Afrique'},
        ]
     
        # Toutes les méthodes de classe doivent avoir comme premier parametre 'cls'  ex: def all(cls)
        # Toutes les méthodes d'instance doivent avoir comme premier parametre 'self'  ex: def all(self)
     
     
        def all(cls):
            print("#################### :", cls.PAYS)
            return cls.PAYS
     
        all = classmethod(all)
     
     
        def find(cls, id):
            return cls.PAYS[int(id)-1]
     
        find = classmethod(find)

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

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