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 :

POO : propriétés et méthodes ne peuvent pas avoir le même nom [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut POO : propriétés et méthodes ne peuvent pas avoir le même nom
    Bonjour.
    Ayant constaté que dans une classe, on ne pouvait pas nommer une méthode du nom de l'une des propriétés, je cherche où se trouve la référence de cette interdiction. J'ai cherché sans succès dans la doc officielle https://docs.python.org/fr/3.9/tutor...es-and-objects.
    PS : je n'ai pas dit que c'était une bonne idée de vouloir le faire, je cherche juste l'endroit où il est écrit que c'est impossible
    Code exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MaClasse:
        def __init__(self, a, b):
            self.nom = a
            self.prenom = b
     
        def nom(self):
            return self.nom

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ce que tu appelles des propriétés s'appelle en fait des attributs et les méthodes d'une classe sont aussi des attributs.
    Et tous les attributs doivent avoir un nom différent, bien sur.

  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

    Tour est dit précédemment
    Tu peux jouer avec la function dir print(dir("essai"))
    si l'objet est un type ou une classe, la liste contiendra les noms de ses attributs
    Sinon, ce que tu essayes de faire est le mécanisme de getter/setter et cela est disponible dans python (de 2 façon)

  4. #4
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Merci pour ces infos. J'ai surtout fait du C, C++ et Java ou setters et getters sont quasi systématiques

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ypcman Voir le message
    je cherche juste l'endroit où il est écrit que c'est impossible
    C'est un petit peu l'évidence donc ce ne sera jamais écrit.

    Si maintenant tu décortiques une classe Python, tu verras que toutes les propriétés et méthodes se trouvent dans un dictionnaire (nommé "__dict__"). Or (et ça c'est écrit dans les chapitres sur les dicos), les clefs d'un dictionnaire doivent être uniques.

    Après, comme dit, tu as le droit de créer des getters (et éventuellement setters et deleters) qui te donneront l'illusion que tu accèdes à un attribut tout en contrôlant ce qui y entre. Mais là encore, le nom du getter/setter doit être unique (ce qui ne pose généralement pas de souci car les getters/setters sont faits pour accéder à des attributs privés donc commençant par "__")
    Code python : 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
    class maClasse:
    	# Gestion du nom
    	def __getX(self): return self.__nom
    	nom=property(__getX, None, None); del __getX
     
    	# Gestion du prénom
    	def __getX(self): return self.__prenom
    	def __setX(self, x):
    		if x: self.__prenom=x
    		else: raise AttributeError("Un prénom ne peut pas être vide")
    	# __setX
    	prenom=property(__getX, __setX, None); del __getX; del __setX
     
    	def __init__(self, nom, prenom):
    		self.__nom=nom
    		self.__prenom=prenom
    	# __init__()
    # maClasse
     
    toto=maClasse("toto", "paul")
    print(toto.nom, toto.prenom)
     
    toto.prenom="Paul"
    print(toto.nom, toto.prenom)
     
    #toto.prenom=""
    #print(toto.nom, toto.prenom)
     
    #toto.nom="Hello"
    Les lignes commentées provoquent une erreur dans l'exécution.
    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]

  6. #6
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Bonjour Sve@r.
    Citation Envoyé par Sve@r Voir le message
    C'est un petit peu l'évidence donc ce ne sera jamais écrit.
    Sûrement pour des Pythoniens , mais pour moi venant du monde Java, où il est tout à fait possible de nommer attributs et méthodes du même nom, la question pouvait se poser. L'explication par la structure interne de la classe avec le __dict__ est très claire !
    Pour les getters et setters, c'est la même chose qu'en C++ et Java

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ypcman Voir le message
    mais pour moi venant du monde Java, où il est tout à fait possible de nommer attributs et méthodes du même nom, la question pouvait se poser.
    Ah oui, j'ai fait il y a longtemps une initiation Java et si je me souviens bien (donc si je ne dis pas de connerie), c'est parce qu'en Java, tous les attributs sont automatiquement privés. Donc (là encore c'est sous réserve de no stupidity) les attributs sont alors renommés automatiquement en interne par Java. De fait, les méthodes de même nom servent de getter/setter pour l'attribut.
    Bref Java fait automatiquement ce que les Pythoniens font manuellement (cf mon exemple).
    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
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    De fait, les méthodes de même nom servent de getter/setter pour l'attribut.
    Parfois oui. En Java, c'est faisable d'avoir un getter et un setter de même nom qu'un attribut mais ce n'est pas propre, à mon goût et ce n'est généralement pas ce qui est fait. Par exemple, sous Eclipse, une fois que tu as défini tes attributs/propriétés monAttribut dans ta classe, tu cliques sur un bouton et ça t'écris automatiquement tes getters getMonAttribut() et setters setMonAttribut() et aussi le constructeur qui a le nom de la classe ...

  9. #9
    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
    Citation Envoyé par ypcman Voir le message
    écris automatiquement tes getters getMonAttribut() et setters
    Oui, il est plus que recommandé d'avoir ce type d'accès en C++, java, php et autre langage poo
    Mais en python il ne sont simplement pas recommandés, même déconseillés. Les getters/setteurs existent uniquement que pour résoudre un problème "fonctionnel", par exemple :
    set: tester l'entrée et/ou la convertir
    get: conversion ou si attribut n'existe pas réellement dans la class

    exemple (pseudo code) avec Personne
    get Personne.age -> (jour_courant - self.date_de_naissance).year
    # ou/et
    set Personne.age -> if age <0 then Exception

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par ypcman Voir le message
    Sûrement pour des Pythoniens , mais pour moi venant du monde Java, où il est tout à fait possible de nommer attributs et méthodes du même nom, la question pouvait se poser.
    Avec un langage compilé comme Java ou C++, plusieurs méthodes peuvent avoir le même nom et des signatures différentes pour que le compilateur sache quel point d'entrée doit être appelé. Avec un langage interprété, il faudrait faire çà à l'exécution avec un coût non négligeable (une vérification statique à la mypy peut le faire et il y a un typing.overload).
    Et comme ce n'est pas très réaliste de le faire, un dictionnaire pour réaliser les attribut d'une classe, un autre pour ceux de l'instance,... suffisent.

    Ou est ce raconté? Dans portée et espace de nommage de façon implicite:
    Un espace de nommage est une table de correspondance entre des noms et des objets. La plupart des espaces de nommage sont actuellement implémentés sous forme de dictionnaires Python, mais ceci n'est normalement pas visible (sauf pour les performances) et peut changer dans le futur.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    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
    Citation Envoyé par Sve@r Voir le message
    les getters/setters sont faits pour accéder à des attributs privés donc commençant par "__")
    Attention, pas que 2 tirets ! selon la recommandation (pep 8):
    _nom = privé
    __nom = privé "fort" : privé aussi pour les classes descendantes

    C'est surtout ce qui change de java, ici ce n'est qu'une recommandation d'écriture, python lui ne change pas le scope en privé

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Citation Envoyé par ypcman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MaClasse:
        def __init__(self, a, b):
            self.nom = a
            self.prenom = b
     
        def nom(self):
            return self.nom
    Un code exemple permettant de gérer cela de manière quasi équivalent niveau nommage,

    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
    class maClasse:    
        def __init__(self, nom, prenom):
            self.__nom = nom
            self.__prenom = prenom
     
        @property
        def nom(self):
            return self.__nom
     
        @property
        def prenom(self):
            return self.__prenom
     
        @prenom.setter
        def prenom(self, firstname):
            if not firstname.strip():
                raise ValueError("Un prénom ne peut être vide")
            self.__prenom = firstname
     
     
     
    toto = maClasse("toto", "paul")
    print(toto.nom, toto.prenom)
     
    toto.prenom = "Paul"
    print(toto.nom, toto.prenom)
     
    # toto.prenom=""
    # print(toto.nom, toto.prenom)
    #
     
    # toto.nom="Hello"

  13. #13
    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
    [chipotte]
    Citation Envoyé par fred1599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        def __init__(self, nom, prenom):
            self.__nom = nom
            self.__prenom = prenom
     
        @prenom.setter
        def prenom(self, firstname):
            if not firstname.strip():
                raise ValueError("Un prénom ne peut être vide")
            self.__prenom = firstname
    pas forcément fan (en tout cas pas toujours) car ici, on peut se retrouver à la création avec un objet invalide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def __init__(self, nom, prenom):
            self.__nom = nom
            self.__prenom = None
            # ou a la limite, si objet peut-être vide à la creation: if nom and prenom:
            self.premon = prenom

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Hello,

    Citation Envoyé par papajoker Voir le message
    [chipotte]

    pas forcément fan (en tout cas pas toujours) car ici, on peut se retrouver à la création avec un objet invalide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def __init__(self, nom, prenom):
            self.__nom = nom
            self.__prenom = None
            # ou a la limite, si objet peut-être vide à la creation: if nom and prenom:
            self.premon = prenom
    J'avoue ne pas avoir compris le sens de ta phrase... Le fait de créer ou non des objets valides dépendra certainement des critères que tu auras définis préalablement. Dans notre cas, créer des objets (maclasse, on aurait pu dire Personne par ex.) sans nom et prénom me semble pas très logique, dans ce cas on peut vérifier avant ou pendant sa construction que nom et prenom sont valides selon tes critères.

    Par contre changer de prénom, pourquoi pas, mais plutôt qu'utiliser une méthode pour faire cela, écrire person.prenom = ... me semble niveau syntaxe plus agréable que person.set_name(...) même si je trouve les deux syntaxes claires dans leur intention.
    Dans les deux cas on devra vérifier que le changement reste valide par rapport aux critères définis précédemment.

    Je n'ai clairement pas été dans les détails, car rien de ce qui est présenté par le PO ne donnait sens à le faire.

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    J'avoue ne pas avoir compris le sens de ta phrase... Le fait de créer ou non des objets valides dépendra certainement des critères que tu auras définis préalablement.
    Je pense que c'est parce que ton exemple (ainsi que le mien) interdisent un prénom vide en modification mais pas en création.

    Citation Envoyé par fred1599 Voir le message
    Je n'ai clairement pas été dans les détails, car rien de ce qui est présenté par le PO ne donnait sens à le faire.
    Exact, ce n'étaient que des exemples de getters/setters montrant qu'on peut créer des méthodes pouvant être utilisées comme des attributs. Mais on ne pourra pas, comme le PO cherche à faire, créer des méthodes de même nom que des attributs.
    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]

  16. #16
    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
    Citation Envoyé par fred1599 Voir le message
    Je n'ai clairement pas été dans les détails, car rien de ce qui est présenté par le PO ne donnait sens à le faire.
    j'ai bien mis "chipotte"


    Citation Envoyé par fred1599 Voir le message
    Le fait de créer ou non des objets valides dépendra certainement des critères que tu auras définis préalablement.
    Justement, ici on donne dans cette classe un critère fort, si on le donne il faut le respecter dans toute la chaine.

    Citation Envoyé par fred1599 Voir le message
    dans ce cas on peut vérifier avant ou pendant sa construction que nom et prenom sont valides selon tes critères.
    Pas mes critères, mais les critères de la class. Et puisque internes ici, il est illogique de les ré-écrire avant la construction, ici je demande justement à les utiliser lors de la construction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nom=input("?")
    prenom=input("?")
    tel=input("?")
    p = Personne(nom, prenom, tel) # si ok alors la personne est valide
    Toi tu dis de valider avant les paramètres ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nom=input("?")
    prenom=input("?")
    tel=input("?")
    if prenom:
    if regex("xxxx", tel):
    if ???? :
        p = Personne(nom, prenom, tel)
    Cela implique de connaitre le contenu de la classe et de dupliquer le code à ce niveau. Pour moi, une class qui m'oblige à ce sport n'est pas bonne...


    Citation Envoyé par fred1599 Voir le message
    Dans notre cas, créer des objets (maclasse, on aurait pu dire Personne par ex.) sans nom et prénom me semble pas très logique
    c'est le cas donné en commentaire par moi car oui, c'est une exception mais parfois désirée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    p = Personne()
    p.nom=input("?")
    p.prenom=input("?")

  17. #17
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Merci à tous pour vos réponses fort éclairantes sur la philosophie de Python

  18. #18
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Je pense qu'on s'est pas très bien compris sur ce coup,

    Quand je parle de critères définis préalablement, je parle de conception, c'est à dire avant de développer quoi que se soit !

    Si je crée une personne, j'ai besoin de savoir quelles sont les conditions pour que je puisse là construire de la manière adaptée à mon développement futur.
    Je n'ai pas vu ces conditions dans les informations du PO ni dans les réponses précédentes.

    Des critères de classe ? Je sais pas ce que c'est ! Comme je l'ai dis précédemment, définir la construction d'un objet se fait selon un besoin qui ne semble pas être défini préalablement.

    Et puisque internes ici, il est illogique de les ré-écrire avant le construction
    Pareil on se comprend pas, toi tu parles de création, alors que dans mon code on refuse la modification d'un prénom par une chaîne vide.

    Toi tu dis de valider avant les paramètres ?

    Oui mais pas de la manière dont tu l'as écrite, plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try:
        pers = Personne(nom, prenom)
        # suite du code
    except ValueError:
        # suite...
    c'est le cas donné en commentaire par moi car oui, c'est une exception mais parfois désirée


    Je me suis servi du code de Sve@r pour faire le mien et répondre au PO et à ses attentes d'attributs avec des nommages très rapprochés, je n'avais pas lu ta remarque sur attributs vides.
    J'avoue avoir lu en diagonale les réponses et plus me concentrer sur une réponse au PO.

    P.S : Si c'est désiré, c'est défini et justifié dans un cahier des charges, puis, on développe en conséquence. J'ai considéré personnellement que cela semblait pas très logique de le faire (et je continue à le prétendre), mais je n'avais pas vu et donc pas pris en considération ta remarque...

  19. #19
    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
    Citation Envoyé par fred1599 Voir le message
    Pareil on se comprend pas, toi tu parles de création, alors que dans mon code on refuse la modification d'un prénom par une chaîne vide.
    Mon "chipotage" est juste cela ! si on donne une règle à la modification , il est normal de la donner aussi à la création (tout attribut de l'objet ne va pas forcément être modifié par la suite)


    Citation Envoyé par fred1599 Voir le message
    Je me suis servi du code de Sve@r
    oops, comme toi, je ne lis pas tout bien, j'avais zappé la source. Mais ma remarque ne visait personne et le code n'a pas de problème (un exemple n'a pas à être parfait), juste un addon pour ceux qui peuvent lire(/copier coller) ce sujet plus tard.

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

Discussions similaires

  1. Ne pas avoir la même fenêtre basique de Java
    Par raphheuhh dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 22/01/2020, 11h31
  2. Réponses: 9
    Dernier message: 11/07/2017, 18h37
  3. Deux arguments UrlRewritng qui ne peuvent pas marcher en même temps
    Par Alexandrebox dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 25/04/2014, 11h03
  4. Deux plugins peuvent-ils avoir le même raccourci ?
    Par el_jefe dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 18/02/2011, 01h42
  5. Réponses: 2
    Dernier message: 05/09/2006, 10h08

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