Merci.
quel intérêt puisque que le typage est dynamique et que Python fournit
des paramètres par défaut et nommés ? au pire, tu fais des méthodes de
classes qui jouent le rôle de fabrique
Petite précision supplémentaire: en anglais on distingue "overloading"
et "overriding", je ne connais pas les traductions françaises, peut-être
"surcharge" et "redéfinition" ?
Exemple (en pseudo "strong typed python" code et avec toutes mes escuses
au BDFL ;-):
class Fille: # c'est la classe mère !
def reçoit(Invités invités): #=m1
prepareUnBonRepas()
class FilleCachée(Fille): # classe fille de Fille !!
def reçoit(Invités invités): #=m2 override m1
prepareDesSushis()
def reçoit(Pére mangezDesPommes): #=m3 overload m2
prepareDeLaTetePressee()
L'overloading est un concept de programmation fonctionelle et n'a rien à
voir avec l'héritage (en java il est d'ailleurs résolu statiquement) au
contraire de l'overloadong qui n'a de sens que dans un contexte OO.
Python ne permet effectivement pas l'overloading (et c'est vrai aussi
pour __init__ ) pour les raisons dites plus haut (paramètres par défaut)
et le rend inutile pour les mêmes raisons. Par contre, l'overriding est
pleinement supporté par exemple pour redéfinir (et non pas surcharger à
mon avis) les opérateurs.
bg
Exactement.
> Exemple (en pseudo "strong typed python" code et avec toutes mes escuses
> au BDFL ;-):
>
> class Fille: # c'est la classe mère !
> def reçoit(Invités invités): #=m1
> prepareUnBonRepas()
>
> class FilleCachée(Fille): # classe fille de Fille !!
> def reçoit(Invités invités): #=m2 override m1
> prepareDesSushis()
> def reçoit(Pére mangezDesPommes): #=m3 overload m2
> prepareDeLaTetePressee()
>
> L'overloading est un concept de programmation fonctionelle et n'a rien à
> voir avec l'héritage (en java il est d'ailleurs résolu statiquement) au
> contraire de l'overloadong qui n'a de sens que dans un contexte OO.
^^^^^^
C'est fait exprès, ou tu voulais dire 'overriding' ?-)
> Python ne permet effectivement pas l'overloading (et c'est vrai aussi
> pour __init__ ) pour les raisons dites plus haut (paramètres par défaut)
> et le rend inutile pour les mêmes raisons.
Pour préciser et compléter : l'impossibilité de surcharger des fonctions
en Python tient d'abord au typage dynamique (impossible de résoudre
l'appel de fonction en se basant sur le type des arguments), et
l'inutilité de la surcharge tient autant au typage dynamique qu'à la
possibilité de passer des arguments par défaut et des arguments non
précisés (*args, **kwargs).
Bruno
>
>> Python ne permet effectivement pas l'overloading (et c'est vrai aussi
>> pour __init__ ) pour les raisons dites plus haut (paramètres par
>> défaut) et le rend inutile pour les mêmes raisons.
>
>
> Pour préciser et compléter : l'impossibilité de surcharger des fonctions
> en Python tient d'abord au typage dynamique (impossible de résoudre
> l'appel de fonction en se basant sur le type des arguments), et
> l'inutilité de la surcharge tient autant au typage dynamique qu'à la
> possibilité de passer des arguments par défaut et des arguments non
> précisés (*args, **kwargs).
>
Je ne peux qu'opiner du bonnet (d'âne ;-).
>
> Bruno
>