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 :

Probleme compréhension heritage orienté objet


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut Probleme compréhension heritage orienté objet
    Bonjour a toutes et a tous ,

    Je sollicite votre aide , non pas pour la compréhension de l'héritage en lui meme , mais pour cette facon d'ecrire les parametres dans la classe que je n'avais jamais vu auparavant . Dabord le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    spawn_floating_particle(pos)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def spawn_floating_particle(pos):
        loc = pos[0] + randint(-10, 10), pos[1] + randint(-10, 10)
        color = "yellow"
        direction = pygame.math.Vector2(0, 0)
        speed = randint(50, 100)  # 50   100
        FloatingParticle(particle_group, loc, color, direction, speed)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class FloatingParticle(Particle):
        def __init__(self,
                     groups: pygame.sprite.Group,
                     pos: list[int],
                     color: str,
                     direction: pygame.math.Vector2,
                     speed: int):
            super().__init__(groups, pos, color, direction, speed)
    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
    class Particle(pygame.sprite.Sprite):
        def __init__(self,
                     groups: pygame.sprite.Group,
                     pos: list[int],
                     color: str,
                     direction: pygame.math.Vector2,
                     speed: int):
            super().__init__(groups)
            self.pos = pos
            self.color = color
            self.direction = direction
            self.speed = speed
            self.alpha = 255
            self.fade_speed = 400  # 200
            self.size = 4   #4
     
            self.create_surf()
    Dans ma classe Particule par exemple , j'ai cette initialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def __init__(self,
                     groups: pygame.sprite.Group,
                     pos: list[int],
                     color: str,
                     direction: pygame.math.Vector2,
                     speed: int):
    Pourquoi a t il complété groups avec pygame.sprite.Group , pos avec list[int], color avec str , direction avec pygame.math.Vector2 , speed avec int . Es ce obligatoire ? Qu'est ce que ca apporte ?
    Lorsqu'on donne une valeur par défaut , ne fait on pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def __init__(self, color = bleu, speed = 10, ...):
    Pourquoi ici utilise t on les " : " ?

    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Pourquoi a t il complété groups avec pygame.sprite.Group , pos avec list[int], color avec str , direction avec pygame.math.Vector2 , speed avec int . Es ce obligatoire ? Qu'est ce que ca apporte ?
    Quel IDE utilisez vous? Car c'est lui qui fait çà... et ce qu'il fait doit certainement se paramétrer.

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

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    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 323
    Par défaut
    bonjour

    les annotations de type ne sont pas obligatoires
    cette facon d'ecrire les parametres dans la classe que je n'avais jamais vu auparavant
    cela n'a rien à voir avec les classes ! Si tu regardes le code sources des lib standard, elles utilisent ces annotations.

    Qu'est ce que ca apporte ?
    c'est portant clair, a minimum cela est de la documentation pour coder (de l'aide pour le codeur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def creer_truc(identifiant: str, valeur: str):
        pass
    machin = creer_truc(45, "oui")   # identifiant est une chaine ?
     
    def creer_truc(identifiant: int, valeur: str):
        pass
    machin = creer_truc("4578-78", "oui")   # identifiant est un entier ?
    Dans ces 2 cas, je ne suis pas très malin, je ne lis pas la doc (annotations) et je me demande ensuite pourquoi mon application plante

    Avec def creer_truc(identifiant, valeur), je n'ai aucune idée de ce que je dois passer à la fonction

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    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 839
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par chris7522 Voir le message
    Pourquoi ici utilise t on les " : " ?
    Ce sont des annotations de type. Plutôt que d'écrire a=123 tu écris a:int=123 pour indiquer que "a" est destinée à stocker un int.
    Le hic c'est que ça devient chiant pour des paramètres qui sont destinés à recevoir des choses différentes selon les appels (exemple def fct(a:int|float) pour dire que le paramètre "a" sera un int ou un float. Et encore plus chiant quand tu décris des listes ou des tuples car tu peux aussi décrire leur contenu => tab:list[int|float|str|list[str|float|int]]=[123, 4.5, "Hello", ["World !!!", 5.4, 321]].

    Et l'autre "hic" c'est que c'est purement informatif, Python ne vérifie pas la concordance => a:int="hello" ne pose aucun souci. Mais certains outils peuvent le checker.
    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]

  5. #5
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Bonjour et merci beaucoup a tous d' avoir pris la peine de me répondre !

    J'utilise pycharm , j'ignore quel IDE la personne a qui j'ai emprunté ce code utilise .
    J'ai essayé sans toutes ces annotations et sans surprise, cela fonctionne de la meme maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Particle(pygame.sprite.Sprite):
        def __init__(self, groups, pos, color, direction, speed):
            super().__init__(groups)
            self.pos = pos
            self.color = color
            self.direction = direction
            self.speed = speed
            self.alpha = 255
            self.fade_speed = 500  # 200
            self.size = 4   #
            self.create_surf()
    Le fait de "typer " , ne serai ce pas une facon d' attribuer la bonne quantité de mémoire ?
    Je viens de lire un commentaire d'une personne qui a bien voulu m'aider egalement :
    le : dans les paramètres de fonction, c'est pour les "hint" (indices) de typage. Ca sert surtout aux développeurs ou outils d'analyse de code pour trouver d'éventuelles erreurs. C'est parfaitement facultatif, on pourrait presque voir ça comme un commentaire.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Le fait de "typer " , ne serai ce pas une facon d' attribuer la bonne quantité de mémoire ?
    PyCharm peut ajouter et sait utiliser les annotations tel que décrit dans cette documentation.
    Cela sert à pouvoir vérifier que les paramètres et les types de paramètres attendus sont passés aux fonctions/méthodes appelées sans avoir à exécuter le code.
    A priori PyCharm sait faire cette vérification sinon, il faut "mouliner" le code avec un "type checker" comme mypy.
    La lecture de la documentation du module typing raconte tout çà en détails.

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

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    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 839
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Le fait de "typer " , ne serai ce pas une facon d' attribuer la bonne quantité de mémoire ?
    Absolument pas. Le type (donc la mémoire associée) est défini lors de l'affectation (typage dynamique). Et allouer un int au typage ou à l'affectation ça reste toujours une zone allouée à la taille d'un int.
    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]

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    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 : 4 064
    Par défaut
    C'est parfaitement facultatif, on pourrait presque voir ça comme un commentaire.
    Pas chez moi en tout cas, j'impose aux devs le typage dans les paramètres et d'éviter le plus possible les docstrings en étant très précis dans le nommage (doit indiquer ce que fait la fonction, la responsabilité de la classe doit être claire, ...).
    Mypy ne passe rien dans l'automatisation des tests et c'est très bien comme ça, car ça laisse à penser qu'on sait ce qu'on fait et pourquoi on le fait !

    Donc oui ça l'est et d'ailleurs ne sert à rien si on utilise pas un vérificateur de type tel que mypy pour le plus connu.
    Mais non ça ne l'est absolument pas quand on automatise les tests avec mypy.

    C'est un outil dont je ne me passe jamais surtout pour des projets à grande envergure et ça impose l'uniformité dans le développement.

    Ça peut faire perdre pas mal de temps, faut l'admettre, mypy manque encore un peu de maturité dans les erreurs annoncées, progresse dans ce domaine. Par contre on peut gagner beaucoup de temps en débogage et dans les tests unitaires... je le recommande fortement sur des grands projets.

    Si on utilise pas un outil de vérification de types comme mypy, je conseille de rester aux docstrings, c'est mon avis.

Discussions similaires

  1. Problème d'orienté objet
    Par zenux dans le forum C++
    Réponses: 6
    Dernier message: 21/11/2007, 19h44
  2. Problème d'héritage css (classe et objet)
    Par Askle dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 03/06/2007, 20h11
  3. Réponses: 3
    Dernier message: 18/04/2007, 14h02
  4. Problème d'héritage orienté objet
    Par pitlabranche dans le forum Delphi
    Réponses: 3
    Dernier message: 24/01/2007, 21h09
  5. [C#]Orienté Objet Heritage
    Par Bils dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/04/2006, 00h34

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