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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| import operator
class Nombre():
def __init__(self,valeur):
self.valeur = valeur
def __str__(self):
return str(self.valeur)
def __repr__(self):
return "Nombre(%s)"%self.valeur
def __add__(self, other):
return Nombredynamique(Operation(self,other,operator.add))
def __mul__(self, other):
return Nombredynamique(Operation(self,other,operator.mul))
def mettre_a_jour(self, nouvelle_valeur):
self.valeur = nouvelle_valeur
class Operation():
def __init__(self, nb1, nb2, op):
self.nb1 = nb1
self.nb2 = nb2
self.op = op
def __str__(self):
return "(%s,%s,%s)"%(repr(self.nb1),str(self.op),repr(self.nb2))
def result(self):
return self.op(self.nb1.valeur,self.nb2.valeur)
class Nombredynamique(Nombre):
def __init__(self,operation):
self.operation=operation
def __repr__(self):
return str(self.operation)
@property
def valeur(self):
return self.operation.result()
def mettre_a_jour(self, nouvelle_valeur):
raise RuntimeError("Un nombre dynamique ne peut etre mis à jour")
a=Nombre(2)
b=Nombre(3)
c=a+b
print(c)
a.mettre_a_jour(5)
print(c)
d=Nombre(2)*c
print(d)
a.mettre_a_jour(7)
print(d)
e=a*b+d
print(e,'=',repr(e))
b.mettre_a_jour(4)
print(e)
e=a
print(a,e)
a.mettre_a_jour(5)
print(a,e)
f=a*c
print(a,b,c,f)
a=c
print(a,b,c,f)
print(repr(c))
print(repr(f)) |
Partager