CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : POO python

DébutPage précedente
1
Page suivantePage suivante
MonsieurBeauf MonsieurBeauf
MP
Niveau 10
24 mars 2020 à 16:17:49

Salut,

question toute bête : j'ai jamais développé sérieusement en python et je voulais savoir si ça se faisait, dans une classe, d'avoir plusieurs méthodes ayant le même nom mais pas les même paramètres. La signature est donc différente, c'est très connu en java et je sais pas si c'est faisable en python de la même manière et surtout si c'est une bonne pratique "pythonnique"

thx les poulets :coeur:

[Black_Spirit] [Black_Spirit]
MP
Niveau 15
24 mars 2020 à 19:09:05

Nope, pas possible.

AlainTest1 AlainTest1
MP
Niveau 9
24 mars 2020 à 19:26:25

Salut !
Tu parles d'overload ?
Jamais essayé.

À noter que c'est arrivé tard en Java, d'où le fait que les programmeurs Java ont tendance à utiliser des getters et des setters et non pas des sortes de "attr_accessor" comme on peut en voir en Ruby.

Pour ce qui est de Python, j'ai trouvé un article qui en parle.
https://www.codementor.io/@arpitbhayani/overload-functions-in-python-13e32ahzqt

Je ne l'ai pas lu mais ça a l'air propre.
Apparemment il n'y a pas d'overload en Python.

À noter que tu peux toujours utiliser des "Décorateurs" en Python. Tout dépend ce que tu veux faire.

Ah et au fait, si jamais...
https://www.jeuxvideo.com/forums/42-51-62534259-1-0-1-0-qui-pour-discord.htm
Je suis peu présent sur le forum.

Message édité le 24 mars 2020 à 19:26:53 par AlainTest1
[Black_Spirit] [Black_Spirit]
MP
Niveau 15
24 mars 2020 à 19:36:49

Ça dépend surtout le besoin. Y a d'autres manières d'avoir un résultat équivalent. Personnellement j'ai jamais eu besoin de faire du method overloading en python, donc forcer la feature via des workaround ça me semble pas très "pythonique" justement.

AlainTest1 AlainTest1
MP
Niveau 9
24 mars 2020 à 19:43:11

Le 24 mars 2020 à 19:36:49 [Black_Spirit] a écrit :
Ça dépend surtout le besoin. Y a d'autres manières d'avoir un résultat équivalent. Personnellement j'ai jamais eu besoin de faire du method overloading en python, donc forcer la feature via des workaround ça me semble pas très "pythonique" justement.

La question étant de savoir si tu as déjà fait autre chose que du Python...

MonsieurBeauf MonsieurBeauf
MP
Niveau 10
24 mars 2020 à 19:53:20

Le 24 mars 2020 à 19:26:25 AlainTest1 a écrit :
Salut !
Tu parles d'overload ?
Jamais essayé.

À noter que c'est arrivé tard en Java, d'où le fait que les programmeurs Java ont tendance à utiliser des getters et des setters et non pas des sortes de "attr_accessor" comme on peut en voir en Ruby.

Pour ce qui est de Python, j'ai trouvé un article qui en parle.
https://www.codementor.io/@arpitbhayani/overload-functions-in-python-13e32ahzqt

Je ne l'ai pas lu mais ça a l'air propre.
Apparemment il n'y a pas d'overload en Python.

À noter que tu peux toujours utiliser des "Décorateurs" en Python. Tout dépend ce que tu veux faire.

Ah et au fait, si jamais...
https://www.jeuxvideo.com/forums/42-51-62534259-1-0-1-0-qui-pour-discord.htm
Je suis peu présent sur le forum.

yes ton article est exactement ce qu'il me fallait. J'ai jamais développé d'application de manière pro en python là je c'est nickel merci ! :)

[Black_Spirit] [Black_Spirit]
MP
Niveau 15
24 mars 2020 à 19:54:58

Oui justement. Et on choisit une techno en fonction de son besoin, pas l'inverse. Donc faire des workarounds pour simuler (en moins bien donc) ce que propose un autre langage, je suis pas fan.

Surtout qu'y a certainement d'autres manières plus simple de faire un truc équivalent. En utilisant *args et **kwargs ou encore via les paramètres par défaut par exemple.

Message édité le 24 mars 2020 à 19:56:21 par [Black_Spirit]
MonsieurBeauf MonsieurBeauf
MP
Niveau 10
24 mars 2020 à 20:20:48

Le 24 mars 2020 à 19:54:58 [Black_Spirit] a écrit :
Oui justement. Et on choisit une techno en fonction de son besoin, pas l'inverse. Donc faire des workarounds pour simuler (en moins bien donc) ce que propose un autre langage, je suis pas fan.

Surtout qu'y a certainement d'autres manières plus simple de faire un truc équivalent. En utilisant *args et **kwargs ou encore via les paramètres par défaut par exemple.

Ouais j'ai commencé à développer mes classes avec les *args mais pour la doc c'est horrible, si je retouche au code dans 2 ans je saurai pas à quoi tout ce bordel sert héhé

Message édité le 24 mars 2020 à 20:22:16 par MonsieurBeauf
[Black_Spirit] [Black_Spirit]
MP
Niveau 15
24 mars 2020 à 20:35:47

Sinon, en python, un fichier c'est un module et un module a son namespace.

Donc en gros tu peux aussi avoir différents fichiers et faire un truc de ce genre :

Fichier square.py :


def area(n):
    return n * n

Fichier rectangle.py :


def area(n, m):
    return n * m

Fichier main.py, le point d'entrée:


import square
import rectangle

print(square.area(2))  # 4
print(rectangle.area(2, 3))  # 6

Les classes aussi ont leur propre namespace donc une autre manière de faire ça serait d'avoir pleins de classes (Square, Rectangle, etc.) qui définissent chacune leur propre méthode area.

Ou encore un example avec des paramètres par défauts :


def area(length, width=None):
    if width is not None:
        return length * width

    return length * length


print(area(2))  # 4
print(area(2, 3))  # 6

Donc voilà, ça dépend pourquoi t'as besoin de le faire en fait.

Message édité le 24 mars 2020 à 20:37:07 par [Black_Spirit]
MonsieurBeauf MonsieurBeauf
MP
Niveau 10
24 mars 2020 à 20:53:43

Le 24 mars 2020 à 20:35:47 [Black_Spirit] a écrit :
Sinon, en python, un fichier c'est un module et un module a son namespace.

Donc en gros tu peux aussi avoir différents fichiers et faire un truc de ce genre :

Fichier square.py :


def area(n):
    return n * n

Fichier rectangle.py :


def area(n, m):
    return n * m

Fichier main.py, le point d'entrée:


import square
import rectangle

print(square.area(2))  # 4
print(rectangle.area(2, 3))  # 6

Les classes aussi ont leur propre namespace donc une autre manière de faire ça serait d'avoir pleins de classes (Square, Rectangle, etc.) qui définissent chacune leur propre méthode area.

Ou encore un example avec des paramètres par défauts :


def area(length, width=None):
    if width is not None:
        return length * width

    return length * length


print(area(2))  # 4
print(area(2, 3))  # 6

Donc voilà, ça dépend pourquoi t'as besoin de le faire en fait.

Ouais je vois, j'ai déjà utilisé ce genre de chose par le passé. Grosso modo, j'ai une classe qui joue le rôle de gate pour communiquer avec une API. Elle émet et reçoit de la data, le but c'est de simplifier l'émission de requête en les sous-découpant. Le sous-découpage ne dépend exclusivement que des headers et des paramètres de mes requêtes.

Grosso modo, j'ai 4 types de requêtes qui nécessiterait 4 même méthodes dont les paramètres seraient différents quoi mais dans mon projet, ça n'aurait aucun sens que ces méthodes aient des noms différents. Et si je dois utiliser cette même classe plus tard, je dois pouvoir comprendre comment la méthode marche juste en lisant la signature, c'est pour ça que je préfère ne pas utiliser de *arg. Surtout qu'il y a des try except partout, si en plus je dois catch quand le *arg est mal rempli.. ahah

[Black_Spirit] [Black_Spirit]
MP
Niveau 15
24 mars 2020 à 20:55:07

Je peux pas edit mais une manière encore plus simple avec paramètres par défaut c'est ça.


def area(length, width=1):
    return length * width


print(area(2))  # 4
print(area(2, 3))  # 6

En gros si tu précises pas la valeur de width, ça sera 1 par défaut. Sinon ça sera celle passé en paramètre. Honnêtement juste avec ça, y a moyen de gérer pas mal de Use cases.

Message édité le 24 mars 2020 à 20:57:22 par [Black_Spirit]
MonsieurBeauf MonsieurBeauf
MP
Niveau 10
24 mars 2020 à 20:59:21

Le 24 mars 2020 à 20:55:07 [Black_Spirit] a écrit :
Je peux pas edit mais une manière encore plus simple avec paramètres par défaut c'est ça.


def area(length, width=1):
    return length * width


print(area(2))  # 4
print(area(2, 3))  # 6

En gros si tu précises pas la valeur de width, ça sera 1 par défaut. Sinon ça sera celle passé en paramètre. Honnêtement juste avec ça, y a moyen de gérer pas mal de Use cases.

yes carrément ! je garde ça en tête cimer ! :)

deepblue deepblue
MP
Niveau 13
25 mars 2020 à 11:44:36

Grosso modo, j'ai 4 types de requêtes qui nécessiterait 4 même méthodes dont les paramètres seraient différents quoi mais dans mon projet, ça n'aurait aucun sens que ces méthodes aient des noms différents.

Dans ce cas et le contexte de "POO python", tu dois donc implémenter 4 classes qui étendent une 5ème classes. La classe parent va exécuter les requêtes selon des paramètres fournis et les classes enfant fournissent ces paramètres (design pattern proxy de mémoire).

lokilok lokilok
MP
Niveau 10
25 mars 2020 à 12:29:20

[20:55:07] <[Black_Spirit]>
Je peux pas edit mais une manière encore plus simple avec paramètres par défaut c'est ça.


def area(length, width=1):
   return length * width


print(area(2))  # 4
print(area(2, 3))  # 6

En gros si tu précises pas la valeur de width, ça sera 1 par défaut. Sinon ça sera celle passé en paramètre. Honnêtement juste avec ça, y a moyen de gérer pas mal de Use cases.

2*1 ça fait 2, pas 4.

[Black_Spirit] [Black_Spirit]
MP
Niveau 15
25 mars 2020 à 14:47:06

C'est une erreur de copier coller et je peux pas éditer toute façon.

lokilok lokilok
MP
Niveau 10
25 mars 2020 à 15:01:11

Et du coup tu corrigerais ça comment ?

Édit : ou alors j'ai pas compris et le but de la fonction c'est pas de calculer l'air d'un carré.

Message édité le 25 mars 2020 à 15:03:16 par lokilok
[Black_Spirit] [Black_Spirit]
MP
Niveau 15
25 mars 2020 à 16:50:26

Si tu veux une méthode area qui marche, suffit de regarder qqes posts au dessus.
Sinon l'exemple c'est surtout pour montrer qu'on peut faire un truc équivalent à la surcharge de méthode Java en python, car on a une même fonction qui peut prendre différents arguments.

Message édité le 25 mars 2020 à 16:51:13 par [Black_Spirit]
DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment