class Temperature:
def __init__(self):
self._value = 0
def __setattr__(self, name, value):
if name == 'Celcius':
self._value = value
elif name == 'Farenheit':
self._value = value * 1.8 + 32
elif name == 'Kelvin':
self._value = value - 273.15
else:
## object.__setattr__(self, name, value)
super().__setattr__(name, value)
Je m'étonne qu'on ne passe pas le self en argument de __setattr__ sur la dernière ligne (j'ai essayé avec et ça plante). Je pensais que super() renvoyait la première classe parente contenant la méthode __setattr__ ici object mais ce n'est pas ça. Finalement la syntaxe python 2 était plus claire car au moins il y a le self qui passe en argument. super(Temperature, self).__setattr__(name, value)
Si j'appelle directement la méthode __setattr__ de la classe object comme sur la ligne commentée, alors là bien sur il faut le self.
Certains préfèrent cette notation simplifiée, et d'autres trouvent ça moins parlant. Maintenant, à toi de voir si les explications de cette nouvelle notation arrivent à te convaincre
Il me semble que c'est la nouvelle forme pour l'utilisation de super. Mais je crois qu'une version alternative existe (en tout cas c'est ce que j'ai mis dans mes notes ):
La réponse de trouve dans l'aide de super, voici le première ligne retournée par help(super) :
super() -> same as super(__class__, <first argument>)
Ainsi, quand tu utilises super() depuis une méthode, __class__ (qui référence la classe courante) et le premier paramètre de la méthode (donc self) sont automatiquement ajoutés à l'appel.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique