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 :

Int�r�t des param�tres optionnels dans les fonctions ?


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2023
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par d�faut Int�r�t des param�tres optionnels dans les fonctions ?
    Bonjour,

    Je me forme actuellement sur Python.
    En testant une fonction constructeur, j'�tais persuad� que celle-ci allait planter dans le sens o� l'ensemble des param�tres n'�tait pas saisi (cf exemple ci-dessous pour c et d).
    Dans un second temps, j'ai lu que les param�tres �taient optionnels.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    def __init__(self, a, b):
            self.a1 = a
            self.b2 = b
            self.c3 = c
            self.d4 = d
    Du coup, je ne comprends pas quel est leur int�r�t ? Pourquoi en mettre certains et pas les autres ?
    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 573
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 573
    Par d�faut
    �tonnant qu'il accepte des chiffres comme nom de variables, c'est contre toutes les r�gles de nommage connues (� ma connaissance du moins). (jamais de chiffre en 1er caract�re du nom de variable)

    et ici self.1, self.2, self.3, self.4 ne sont pas des param�tres optionnels, mais des variables d'instances

    Et comme l'a fait remarqu� fred199, �a plante apr�s renommage des variables.
    Saisies dans le shell IDLE:
    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 Dumm:
    ...     def __init__(self,a,b):
    ...         self.1=a
    ...         
    SyntaxError: invalid syntax
    >>> class Dumm:
    ...     def __init__(self,a,b):
    ...         self.a1=a
    ...         self.b1=b
    ...         self.c1=c
    ...         self.d1=d
    ... 
    ...         
    >>> d=Dumm(1,2)
    Traceback (most recent call last):
      File "<pyshell#12>", line 1, in <module>
        d=Dumm(1,2)
      File "<pyshell#10>", line 5, in __init__
        self.c1=c
    NameError: name 'c' is not defined

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2023
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par d�faut
    Bonjour Fred,

    Dans mon post initial, j'ai voulu r�sumer � la va-vite le code que j'avais execut�.
    Le voici complet et il s'execute sans erreur :

    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
     
    import datetime as dt
     
    """Creation de la Classe"""
    class Vehicules:
        def __init__(self, p_nb_roues, p_couleur):
            self.roues = p_nb_roues
            self.couleur = p_couleur
            self.date_adhesion = dt.date.today()
            self.actif = True
     
            pass
     
        """ la classe se termine à la première ligne non indentée """
     
    moto_1 = Vehicules(2, "rouge")
    vehicule_1 = Vehicules(4, "bleue")
     
    print(moto_1)
    print(moto_1.roues)
    print(moto_1.couleur)
    print(type(moto_1))
     
    moto_1.actif = False
    print(moto_1.actif)
    - Vous dites qu'il n'y a pas d'int�r�t � poser des questions conception mais quand on d�bute, il est quand m�me important de comprendre ce que l'on fait, de comprendre les concepts avant de passer � la syntaxe non ?
    - Donc en ligne 6, il n'est pas choquant �ventuellement de faire un init sans aucun param�tre. Soit def __init__(self): ?

    Merci

  4. #4
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 776
    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 776
    Par d�faut
    Citation Envoy� par Millennial Voir le message
    En testant une fonction constructeur, j'�tais persuad� que celle-ci allait planter dans le sens o� l'ensemble des param�tres n'�tait pas saisi (cf exemple ci-dessous pour c et d).
    Python est un langage interpr�t� => ca va planter lorsque la fonction sera ex�cut�e s'il ne trouve pas c et d dans l'espace global � la fonction/m�thode:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def f(a, b):
    ...     x = a
    ...     y = b
    ...     z = c
    ...
    >>> f(1, 2)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 4, in f
    NameError: name 'c' is not defined
    L'aspect important ici est "tester par vous m�me, se familiariser avec les messages d'erreur".
    Citation Envoy� par Millennial Voir le message
    - Donc en ligne 6, il n'est pas choquant �ventuellement de faire un init sans aucun param�tre. Soit def __init__(self): ?
    Ce qui est choquant, c'est d'�crire ici alors que vous auriez pu tester avant...

    Citation Envoy� par Millennial Voir le message
    Vous dites qu'il n'y a pas d'int�r�t � poser des questions conception mais quand on d�bute, il est quand m�me important de comprendre ce que l'on fait, de comprendre les concepts avant de passer � la syntaxe non ?
    C'est quoi la diff�rence entre une variable (locale ou globale) et un attribut? Normalement, vous devez avoir pass� du temps dans un tuto pour savoir y r�pondre par vous m�me...

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

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 573
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 573
    Par d�faut
    En "r�sumant" il faut quand m�me que �a suive une logique coh�rente avec le vrai code et les r�gles de bases, sinon on va corriger des choses qui n'auraient pas lieu d'�tre "inutilement".

    Les variables self.XX qui ne sont pas initialis� par les param�tres du constructeur, sont utiles � la classe et on ne souhaite pas qu'elles puissent �tre d�finie par l'utilisateur dans le constructeur (selon le besoin de la classe). Ici on a la date du jour (� la cr�ation de l'instance), il est inutile de demander � l'utilisateur de lui fournir, et on indique par principe que si on cr�� l'instance, celle-ci est active (donc self.actif= True)

    Et non il n'est pas choquant d'avoir un __init__ sans param�tre, si il n'y a pas besoin d'initialiser de valeur propre � l'instance ou la classe par le constructeur.

  6. #6
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 108
    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 108
    Par d�faut
    Lorsqu�un posteur originel (PO) modifie le contenu de son post initial sur un forum apr�s qu�une ou plusieurs r�ponses ont �t� apport�es, cela peut entra�ner les probl�matiques suivantes :
    1. Incoh�rence entre la question et les r�ponses
    2. Perte de clart� pour les lecteurs
    3. Complexit� de la mod�ration


    Une bonne pratique est d'informer les lecteurs ou les contributeurs des modifications (vous n'avez pas � le faire car j'ai supprim� ma r�ponse, quoique pour @umfred �a semble �tre encore d'actualit�).

    EDIT:

    Vous dites qu'il n'y a pas d'int�r�t � poser des questions conception mais quand on d�bute, il est quand m�me important de comprendre ce que l'on fait, de comprendre les concepts avant de passer � la syntaxe non ?
    Sauf que votre post originel, indiquait en majorit� des probl�mes de syntaxe, voil� ce qui se passe quand on ne pose pas le probl�me de la bonne mani�re.

  7. #7
    Expert confirm� Avatar de papajoker
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    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 324
    Par d�faut
    bonjour
    Citation Envoy� par Millennial Voir le message
    il n'est pas choquant �ventuellement de faire un init sans aucun param�tre. Soit def __init__(self): ?
    Non, puisque cela d�pend enti�rement de ta classe. Avoir plus d'attributs d'instance que de param�tres dans la fonction d'initialisation est classique (ce que tu as bien fait)

    lu que les param�tres �taient optionnels
    Ceci est une toute autre histoire ! pour toute fonction (et donc m�thode), il est possible d'avoir des param�tres optionnels. Dans ton code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
        def __init__(self, nb_roues, couleur):
    ...
    car = Vehicules()  # PLANTAGE
    Ici, on utilise des param�tres optionnels (avec valeur par d�faut):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
        def __init__(self, nb_roues=4, couleur="blanc"):
    ...
    car = Vehicules()  # OK
    ---------

    EDIT

    Int�r�t des param�tres optionnels dans les fonctions ?
    pas logique ton titre ! la plupart des fonctions que tu utilises dans python ont des param�tres optionnels

  8. #8
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 108
    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 108
    Par d�faut
    - Donc en ligne 6, il n'est pas choquant �ventuellement de faire un init sans aucun param�tre. Soit def __init__(self): ?
    Selon vous construire une voiture sans pr�ciser sa couleur, son type, ... vous para�t int�ressant ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2023
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par d�faut
    Citation Envoy� par wiztricks Voir le message

    Ce qui est choquant, c'est d'�crire ici alors que vous auriez pu tester avant...
    Mais non justement, m�me en cas d'absence de message d'erreur, il se peut que la convention ne tol�re pas une telle pratique.
    Mon interrogation portait sur les bonnes pratiques dans la vraie vie. Est-il usuel de d�clarer l'ensemble des param�tres dans une fonction constructeur ? Fred m'a r�pondu que cela d�pendait des "besoins m�tiers"... donc il ne s'agit pas d'une question de test au pr�alable. Ce que j'ai fait d'ailleurs : c'est l'absence d'erreur qui m'a fait poster ici.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2023
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par d�faut
    Citation Envoy� par fred1599 Voir le message
    Selon vous construire une voiture sans pr�ciser sa couleur, son type, ... vous para�t int�ressant ?

    Non. Justement, mon interrogation portait sur le fait que je puisse acc�der � un attribut (self.date_adhesion et self.status*) sans l'avoir d�clar� comme param�tre dans ma fonction init.

    Merci, je taggue en resolu ce post

    * Comme j'aurais pu saisir self.marque ou self.modele

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 851
    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 851
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par Millennial Voir le message
    Non. Justement, mon interrogation portait sur le fait que je puisse acc�der � un attribut (self.date_adhesion et self.status*) sans l'avoir d�clar� comme param�tre dans ma fonction init.
    Il n'y a pas de rapport. Un param�tre, que ce soit pour une fonction ou une classe (et dans ce dernier cas il sera renvoy� vers la fonction __init__ donc �a reste une fonction) c'est un �l�ment pass� � la fonction par son appelant.
    Mais rien n'interdit � la fonction de cr�er ses propres variables internes, variables qui n'ont alors aucun rapport avec les param�tres (m�me si g�n�ralement la fonction devant traiter ses param�tres utilisera pour cela ses variables internes)
    Exemple
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    def fonction(xxx):
        toto=123
        titi=456
        return toto + titi * xxx

    Et donc si on �largi cette r�llexion aux classes, ses m�thodes peuvent elles-aussi d�finir leurs propres variables ou m�me des attributs sans que les param�tres re�us aient un r�le � jouer dans cette action.
    Exemple
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class vehicule:
        def __init__(self, marque, modele):
            self.marque=marque
            self.modele=modele
            self.km=0
        def roule(self, km): self.km+=km
     
    v=vehicule("bmw", "Serie 8")
    v.roule(140)
    print(v.km)

    Citation Envoy� par Millennial Voir le message
    Est-il usuel de d�clarer l'ensemble des param�tres dans une fonction constructeur ?
    Uniquement les param�tres dont l'objet a besoin pour exister. En revanche il est usuel de cr�er tous les attributs dans le __init__. Dans mon exemple pr�c�dent j'aurais pu cr�er self.km dans la m�thode roule() mais �a aurait �t� plut�t mal vu.
    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]

  12. #12
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 776
    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 776
    Par d�faut
    Citation Envoy� par Millennial Voir le message
    Non. Justement, mon interrogation portait sur le fait que je puisse acc�der � un attribut (self.date_adhesion et self.status*) sans l'avoir d�clar� comme param�tre dans ma fonction init.
    init n'est pas une fonction mais une m�thode qui s'�crit __init__.

    Mais � vous de vous poser des questions du genre: "est ce que toutes les variables (locales) utilis�es dans une fonction doivent �tre pass�s en param�tre?". Vous devriez facilement trouver des contre-exemples!

    La diff�rence entre une variable locale et un attribut d'instance est dans la dur�e de vie: la variable locale n'existe que lorsque la fonction est "active" et sera d�truite � la sortie. L'attribut d'un objet "persiste" � la sortie d'une m�thode (mais rien n'interdit � une m�thode d'avoir/cr�er des variables locale (ce que sont les param�tres re�us comme "self").
    Et pour l'instant, vu le sac de n�uds que vous faites entre param�tres/fonction/m�thodes/.port�e des variables/attributs/... il faudrait prendre le temps de consolider ces notions et de vous fabriquer des rep�res. Sinon, vous allez �tre tr�s vite perdu.

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

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2023
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par d�faut
    Merci Svear et Wiztricks pour vos r�ponses explicites !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 5
    Dernier message: 11/08/2020, 13h55
  2. Usage des pointeurs dans les fonctions
    Par didou31 dans le forum D�buter
    R�ponses: 12
    Dernier message: 22/11/2011, 13h31
  3. R�ponses: 1
    Dernier message: 14/06/2010, 16h24
  4. R�ponses: 15
    Dernier message: 23/01/2010, 18h39
  5. R�ponses: 6
    Dernier message: 27/08/2008, 13h58

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