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 :

Débutant : demande d'aide sur Méthode de classe


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Débutant : demande d'aide sur Méthode de classe
    Salut à tous,

    débutant sous python 3.12 je suis une formation sur la chaîne (gratuite) de Jason Champagne sur YT.

    J'en suis à la leçon 12 sur les méthodes standard, de classe et statique.

    Jusqu'à présent j'ai eu zéro problème.

    Mais là j'ai un code qui ne passe pas sans comprendre pourquoi. J'ai pourtant bien cherché avant de poster mais je ne trouve pas l'origine du problème.

    voilà le code en question :

    Nom : code.png
Affichages : 245
Taille : 118,7 Ko

    et voici le message d'erreur :

    Nom : Capture d’écran (1).png
Affichages : 240
Taille : 68,8 Ko

    J'ai pourtant suivi à la lettre les instructions du cours, j'ai exactement la même syntaxe, dans la vidéo ce code passe sans aucun soucis mais le cours date de 2017.

    Est-ce que quelqu'un pourrait m'aider et me dire ce qui cloche dans ma syntaxe?

    merci d'avance

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    bonjour
    Citation Envoyé par FraZbyX Voir le message
    J'ai pourtant suivi à la lettre les instructions du cours, j'ai exactement la même syntaxe
    En fait non ici, tu ne déclares PAS une méthode statique (ou de classe)
    (donc le message d'erreur indique qu'il faut passer 2 paramètres à ta méthode "normale")

    Je suppose que tu as passé trop d'heures sur le cours et ne vois plus rien (oui les indentations ont un sens en python...)

    NOTE: on ne fait surtout pas de copie écran ! Nous pouvons copier/coller notre texte ici, le formater ensuite avec le bouton "#" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Truc:
        PRIMAIRE = "oui"
    $moi= ( !== ) ? : ;

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Comme indiqué dans les règles, on demande que les codes soient postés dans le forum. Ca nous permet de les récupérer pour les tester sans avoir à les recopier

    Ta méthode "changer_planete" attend deux arguments ("cls" et "nouvelle_planete"). Or tu ne lui en passes qu'un seul. Souci d'indentation

    Et si tu veux mon avis, les cours par vidéo je trouve pas ça super efficace (avec un livre on peut lire, s'arrêter, revenir, bref "agir"; avec une vidéo on ne peut que subir)

    [edit] zut, trop tard
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 788
    Points
    788
    Par défaut
    Bonjour,

    Est-ce que quelqu'un pourrait m'aider et me dire ce qui cloche dans ma syntaxe?
    Il faudrait surtout que tu apprennes à lire les messages d'erreurs
    du compilateur, et à les comprendre. Ce qui peut impliquer
    de faire des allers retours avec la spéc du langage.

    Quoi qu'on pense du langage, la doc est bien fournie et, est,
    une source d'informations précieuse.

    Dommage que tout le monde s'empresse de te donner la béqué en te
    donnant la solution clé en main, cela ne te permet pas de construire
    le bon comportement.

    Bonne journée.

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    En fait non ici, tu ne déclares PAS une méthode statique (ou de classe)
    (donc le message d'erreur indique qu'il faut passer 2 paramètres à ta méthode "normale")

    Je suppose que tu as passé trop d'heures sur le cours et ne vois plus rien (oui les indentations ont un sens en python...)

    NOTE: on ne fait surtout pas de copie écran ! Nous pouvons copier/coller notre texte ici, le formater ensuite avec le bouton "#" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Truc:
        PRIMAIRE = "oui"
    Bingo c'est la bonne réponse j'ai passé trop d'heures et je ne voyait plus que la déclaration de la fonction en classmethod() se faisait dans la fonction elle même au lieu de se faire dans la classe. Oui je sais l'indentation est importante. Sur ce coup là je ne l'aurais pas vu....pas aujourd'hui en tout cas. MERCI!!!!!!

  6. #6
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par unanonyme Voir le message
    Bonjour,



    Il faudrait surtout que tu apprennes à lire les messages d'erreurs
    du compilateur, et à les comprendre. Ce qui peut impliquer
    de faire des allers retours avec la spéc du langage.

    Quoi qu'on pense du langage, la doc est bien fournie et, est,
    une source d'informations précieuse.

    Dommage que tout le monde s'empresse de te donner la béqué en te
    donnant la solution clé en main, cela ne te permet pas de construire
    le bon comportement.

    Bonne journée.
    Non j'avais bien vu le message et je comprenais son sens , mais dans la vidéo du cours le" cls" était aussi écrit mais non spécifié lors de l'appel de la fonction déclarée en classmethod(). le problème c'était l'indentation que je ne voyais plus....

  7. #7
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 788
    Points
    788
    Par défaut
    OK.

  8. #8
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    MERCI A VOUS POUR VOTRE REACTIVITE!!!

    En vieux linuxien j'ai l'habitude de chercher avant de poser des questions (j'en ai peut-être posé trois en 30ans) mais malgré la consultation de la doc python je n'arrivais pas à comprendre ce qui clochait (puisque cls dans une fonction classmethod() n'est pas un argument à renseigner lors de l'appel - ça je l'avais compris) peut-être aurait-je du attendre demain et le petit soucis d'indentation m'aurait sauté à la figure....c'est vrai qu'après 3 heures de cours.......

    oui la video c'est pas le top mais généralement j'arrête, je code, je reprend et autant il y a des cours mal foutus autant le contenu mis en ligne par Jason Champagne sur sa chaîne FormationVideo est vraiment d'une qualité pédagogique exceptionnelle (du moins pour construire les bases)

    Je tiendrais compte de vos conseils quand à la mise en forme de mes posts!!!

    Bonne soirée!!!

    François

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonsoir,

    J'ai bossé dans une entreprise avec un collègue Lead Developer (40 ans d'ancienneté) commençant à 16 ans et ayant 56 ans au moment où je les connus et où je me souviens avoir eu une discussion avec lui sur classmethod.

    En gros ses termes étaient que si tu sens que tu as besoin des classmethod, c'est que tu butes sur la bonne manière de voir la POO. Plus j'avance dans mon expérience, plus je me rapproche de son avis...

    C'est bien de le connaître, d'apprendre à l'utiliser, voir la syntaxe quelques fois, mais est-ce un réel besoin, je sais pas ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par unanonyme Voir le message
    Dommage que tout le monde s'empresse de te donner la béqué en te donnant la solution clé en main, cela ne te permet pas de construire
    le bon comportement.
    Je t'assure que ce n'est pas notre habitude (fais un tour sur le forum et tu le constateras). Mais parfois, quand l'erreur est trop bas niveau, on ne peut pas faire autrement que l'expliquer (un peu comme un axiome mathématique qu'on ne peut pas démontrer). Parce qu'à ce niveau c'est soit "donner la réponse" (et "réponse" ce n'est pas un synonyme de "solution") soit ne rien dire du tout.
    Donc on a certes détaillé un peu plus l'erreur mais on n'a pas donné de code "tout fait". Et ça, pour moi, ce n'est pas "donner la béquée" (ou "becquée" si on reste dans l'orthographe originelle).

    Citation Envoyé par fred1599 Voir le message
    C'est bien de le connaître, d'apprendre à l'utiliser, voir la syntaxe quelques fois, mais est-ce un réel besoin, je sais pas ?
    Ici je donne un exemple d'utilité de classmethod. Mais personnellement je n'en ai jamais eu besoin (et il me semble que si on passe par __class__ on peut même refaire cet exemple sans l'utiliser).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    perso je pense immédiatement aux enum, mais pour le reste

    Il faudrait déjà faire une recherche dans le code source de la lib standard…
    $moi= ( !== ) ? : ;

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Hello,

    Citation Envoyé par Sve@r Voir le message
    Ici je donne un exemple d'utilité de classmethod. Mais personnellement je n'en ai jamais eu besoin (et il me semble que si on passe par __class__ on peut même refaire cet exemple sans l'utiliser).
    C'est aussi la réponse que j'aurai donné, cependant je suis de moins en moins certains que ce genre de besoin est un réel besoin, dans le sens puriste du terme.
    À mon sens, il devrait être possible avec une bonne élaboration d'éviter les syntaxes classmethod et staticmethod.

    Par exemple, on pourrait faire de l'héritage, tiens !

    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
    class date:    
        def __init__(self, jj, mm, yy):
             self.jj = jj
             self.mm = mm
             self.yy = yy
     
     
    class date_from_string(date):
        def __init__(self, string):
            super().__init__(*string.split('/'))
     
     
    d = date_from_string("12/10/10")
     
    print(d.jj, d.mm, d.yy)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    À mon sens, il devrait être possible avec une bonne élaboration d'éviter les syntaxes classmethod et staticmethod.
    Yep. Ton exemple d'héritage fonctionne nickel
    Mon souci était de trouver un exemple d'utilisation de classmethod et je regrette de ne pas avoir trouvé mieux (mieux dans le sens où on ne peut pas faire autrement)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Mon souci était de trouver un exemple d'utilisation de classmethod et je regrette de ne pas avoir trouvé mieux (mieux dans le sens où on ne peut pas faire autrement)...
    En fait c'est pas vraiment un sujet de discussion sur ton tuto, qui est très bien et qui informe de l'utilisation de la syntaxe classmethod et staticmethod, mais plus une discussion ouverte sur le besoin niveau POO d'avoir ce type de syntaxe.
    Est-ce que si on a une conception ou une vue "parfaite" de la manière de modéliser les objets, nous avons réellement besoin de ce type de syntaxe ? D'ailleurs si on cherchait un équivalent de ces deux syntaxes dans d'autres langages POO, je trouve cela assez confus, même sur le point de vue POO.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    D'ailleurs si on cherchait un équivalent de ces deux syntaxes dans d'autres langages POO, je trouve cela assez confus, même sur le point de vue POO.
    Là dessous, je peux aider, du moins sur deux langages en particulier.
    Et j'ai envie de dire que ça dépend du langage.

    Pour Delphi qui est une évolution de Pascal (qui lui même...).
    Bref, il y a l'historique qui fait qu'aujourd'hui il existe plusieurs manière de voire les choses si veux convertir une chaine en date.
    Il y a l'approche procédure avec la routine StrToDateTime().
    Il y a l'approche objet en passant par l'objet DateTime et sa méthode Parse() qui, de mémoire, est statique.

    Pour faire l'inverse, (date vers chaine) en Delphi :
    Il y a l'approche procédure avec la routine DateTimeToStr().
    Il y a l'approche objet en passant par l'objet DateTime et sa méthode ToString() qui par définition (en Delphi) n'est pas statique, puisqu'il s'agit d'une surcharge.

    En C#, tout est objet, on pourra utiliser si veux convertir une chaine en date. :
    La classe statique Convert qui contient donc uniquement des méthodes statiques et en particulier la méthode statique ToDateTime().
    La classe DateTime (ou pour être plus exact, la structure DateTime, c'est légèrement différent) et sa méthode Parse() (et autres dérivées) qui sont statiques.

    Pour faire l'inverse, (date vers chaine) en C#:
    La classe statique Convert qui contient donc uniquement des méthodes statiques et en particulier la méthode statique ToString().
    La classe DateTime et sa méthode ToShortDateString() ou encore ToShortTimeString() qui ne sont pas statique.
    La classe DateTime et sa méthode ToString() qui par définition (en C#) n'est pas statique, puisqu'il s'agit d'une surcharge.

  16. #16
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Par exemple, on pourrait faire de l'héritage
    Ton exemple me semble justement une très mauvaise pratique !
    Ici, tu casses complètement l'héritage "futur" (on va devoir créer une classe date_Plus et une date_from_string_Plus )

    L'exemple de Sve@r est justement la "technique" utilisée dans la lib standard pour créer des constructeurs alternatifs :
    float.fromhex()
    dict.fromkeys()
    date.today() date.fromtimestamp() date.from******()
    Path.home() Path.cwd()
    HTTPResponse.from_httplib()
    $moi= ( !== ) ? : ;

  17. #17
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par popo Voir le message
    Là dessous, je peux aider, du moins sur deux langages en particulier.
    Et j'ai envie de dire que ça dépend du langage.
    Rien que dire cela confirme déjà une confusion

    Citation Envoyé par popo Voir le message
    Pour Delphi qui est une évolution de Pascal (qui lui même...).
    Bref, il y a l'historique qui fait qu'aujourd'hui il existe plusieurs manière de voire les choses si veux convertir une chaine en date.
    Il y a l'approche procédure avec la routine StrToDateTime().
    Il y a l'approche objet en passant par l'objet DateTime et sa méthode Parse() qui, de mémoire, est statique.

    Pour faire l'inverse, (date vers chaine) en Delphi :
    Il y a l'approche procédure avec la routine DateTimeToStr().
    Il y a l'approche objet en passant par l'objet DateTime et sa méthode ToString() qui par définition (en Delphi) n'est pas statique, puisqu'il s'agit d'une surcharge.

    En C#, tout est objet, on pourra utiliser si veux convertir une chaine en date. :
    La classe statique Convert qui contient donc uniquement des méthodes statiques et en particulier la méthode statique ToDateTime().
    La classe DateTime (ou pour être plus exact, la structure DateTime, c'est légèrement différent) et sa méthode Parse() (et autres dérivées) qui sont statiques.

    Pour faire l'inverse, (date vers chaine) en C#:
    La classe statique Convert qui contient donc uniquement des méthodes statiques et en particulier la méthode statique ToString().
    La classe DateTime et sa méthode ToShortDateString() ou encore ToShortTimeString() qui ne sont pas statique.
    La classe DateTime et sa méthode ToString() qui par définition (en C#) n'est pas statique, puisqu'il s'agit d'une surcharge.
    Dans tout cela on pourrait se poser la question de savoir si ce que tu appelles statique est équivalent à une classmethod ou staticmethod en python ?
    C'est justement sur ce sujet que j'y avais vu une confusion...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  18. #18
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Ton exemple me semble justement une très mauvaise pratique !
    Ici, tu casses complètement l'héritage "futur" (on va devoir créer une classe date_Plus et une date_from_string_Plus )

    L'exemple de Sve@r est justement la "technique" utilisée dans la lib standard pour créer des constructeurs alternatifs :
    float.fromhex()
    dict.fromkeys()
    date.today() date.fromtimestamp() date.from******()
    Path.home() Path.cwd()
    HTTPResponse.from_httplib()
    J'ai pas tout compris ! Qu'appelles-tu l'héritage futur ? L'héritage était pas un exemple pour donner une bonne pratique, mais ajouter un exemple sur d'autres moyens de voir la POO pour remplacer classmethod et staticmethod. On aurait pu donner d'autres exemples sans doute qui me sont pas venus à l'esprit sur le moment.

    Je sais très bien que l'exemple de Sve@r est la technique utilisée, ce n'est pas le sujet de la conversation (POO et non syntaxe), mais le besoin lié à la POO de faire ce type d'utilisation.
    Est-ce qu'il est justifié du point de vue POO de faire float.fromhex() que hex(...).to_float() par exemple ?

    Ma discussion porte plus sur le sujet : Ai-je réellement besoin de ces deux syntaxes si on modélise parfaitement la solution à son problème ? Je disais que pour moi actuellement, plus j'ai de recul, moins j'en vois le besoin...
    Le sujet syntaxe pure du langage m'intéresse pas réellement à moins d'en avoir besoin pour démontrer une réponse à ma 1ère question.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  19. #19
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    on pourrait se poser la question de savoir si ce que tu appelles statique est équivalent à une classmethod ou staticmethod en python ?
    Python fait comme les autres poo
    De ce que je connais, pascal, java, php, vala ont des déclarations d'attibuts/méthodes "static" et "class" qui sont bien même chose que python.

    Mais dans les autres poo, on peut créer plusieurs constructeurs avec une signature différente avec même nom de méthode. Donc ce problème spécifique python n'existe pas pour les autres.
    $moi= ( !== ) ? : ;

  20. #20
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Python fait comme les autres poo
    Tiens c'est intéressant, quelles sont les POO existantes ?



    Citation Envoyé par papajoker Voir le message
    on peut créer plusieurs constructeurs avec une signature différente avec même nom de méthode. Donc ce problème spécifique python n'existe pas pour les autres.
    En python aussi non ?

    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
    from functools import singledispatchmethod
     
    class Afficheur:
     
        @singledispatchmethod
        def afficher(self, obj): 
            print("Type inconnu:", obj)
     
        @afficher.register
        def _(self, text: str):
            print("Chaîne :", text) 
     
        @afficher.register  
        def _(self, number: int):
            print("Nombre:", number)
     
    a = Afficheur()
    a.afficher("Bonjour") # Chaîne : Bonjour  
     
    a.afficher(15) # Nombre : 15
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [AC-2003] Demande d'aide sur la Méthode Setfocus
    Par gwenagan dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 14/12/2020, 15h56
  2. demande d'aide sur un diagramme de classe
    Par naderinfo dans le forum UML
    Réponses: 1
    Dernier message: 23/03/2013, 10h34
  3. [Débutant] demande d'aide sur richfaces
    Par scaryfan dans le forum JSF
    Réponses: 5
    Dernier message: 24/09/2009, 13h57
  4. [Débutant] Demande d'info sur OpenGL
    Par SkyDev dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/03/2005, 23h58
  5. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38

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