Bonjour à tout le monde…
J’en suis rendu au problème Training #26.
J’ai dû passer l’équivalent d’une journée sur ce problème, et je n’arrive toujours pas à trouver la solution.
Dans le code suivant:
class Temperature:
fahrenheit = TransF()
celsius = TransC()
kelvin = TransK()
t = Temperature()
t.celsius = 100
Lorsque je tape t.celius = 100, j’aimerais que la valeur 100 soit passée à la classe TransC().
Mais ce qui se passe, c’est que la valeur de la variable celsius est tout simplement remplacée par 100 et TransC() est remplacée.
Je pense que je dois repenser tout le problème… et revoir des principes de bases.
La le problème c’est qu’il faut que lorsqu’on modifie l’attribut d’une instance de classe, il faut que cela enclenche la modification des autres attributs de cette instance.
Et là je bloque. Comment, en modifiant un attribut d’une instance de classe, je pourrais automatiquement modifier ses autres attributs ?
Il doit y avoir une question de setter et de getter mais je ne vois pas comment les organiser…
Voici ci dessous le code complet que j’ai réalisé, mais qui ne fonctionne pas pour la raison que je donne ci-dessus…
class TransF:
def __init__(self, initial_value=None): #initial_value est toujours égale à None...)
if initial_value is None:
self.val_f = 0
else:
self.val_f= initial_value
def __get__(self, obj, objtype):
print(self.val_f)
obj.celsius = (self.val_f - 32) * (5/9)
obj.kelvin = (self.val_f + 459.67) * (5/9)
return self.val_f
def __set__(self, obj, val_f):
self.val_f = val_f
class TransC:
def __init__(self, initial_value=None):
if initial_value is None:
self.val = 0
else:
self.val = initial_value
def __get__(self, obj, objtype):
obj.kelvin = self.val + 273.15
obj.fahrenheit = self.val * 1.8 + 32
return self.val
def __set__(self, obj, val):
self.val = val
class TransK:
def __init__(self, initial_value=None):
if initial_value is None:
self.val = 0
else:
self.val = initial_value
def __get__(self, obj, objtype):
obj.celsius = self.val - 273.15
obj.fahrenheit = self.val * (9/5) - 459.67
return self.val
def __set__(self, obj, val):
self.val = val
class Temperature:
fahrenheit = TransF()
celsius = TransC()
kelvin = TransK()
t = Temperature()
t.celsius = 100
print(t.fahrenheit)
print(t.celsius)
print(t.kelvin)