Bonjour,
Je fais de la programmation objet en Python. J'ai des classes pour lesquelles je dois surcharger les opérateurs arithmétiques.

Tous marchent sauf la division.

Voici un exemple de codes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
class A (object):
	def __init__(self, n ='test'):
		self.name = n
 
 
 
 
class B(A):
	def __init__(self, n ='test', val = 0):
		super (B, self).__init__(n)
		self.value = val
 
	def __add__(self, val_to_add):
		if( (isinstance (val_to_add, C)) or isinstance(val_to_add, B) ):
			return ( self.value + val_to_add.value)
		elif( (isinstance(val_to_add, float)) or isinstance(val_to_add, int)):
			return (self.value + val_to_add)
 
	def __sub__(self, val_to_add):
		if( (isinstance (val_to_add, C)) or isinstance(val_to_add, B) ):
			return ( self.value - val_to_add.value)
		elif( (isinstance(val_to_add, float)) or isinstance(val_to_add, int)):
			return (self.value - val_to_add)
 
	def __div__(self, val_to_add):
		if( (isinstance (val_to_add, C)) or isinstance(val_to_add, B) ):
			return ( self.value / val_to_add.value)
		elif( (isinstance(val_to_add, float)) or isinstance(val_to_add, int)):
			return (self.value / val_to_add)
 
 
class C(B):
	def __init__(self, n ='test', val = 0, l = []):
		super (C, self).__init__(n, val)
		self.liste = l
 
	def __add__(self, val_to_add):
		return (super (C, self).__add__(val_to_add))
 
	def __sub__(self, val_to_sub):
		return (super (C, self).__sub__(val_to_sub))
 
	def __div__(self, val_to_div):
		return (super (C, self).__sub__(val_to_div))
 
 
b = B ("toi", 0)
c= C ("t", 3)
 
print ("b / c", b/c)
Sous Python 2.7 ,j'ai comme resultat 0. Ce qui est normal.

Mais sous Python 3.4 j'ai l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Traceback (most recent call last):
  File "biza.py", line 51, in <module>
    print ("b / c", b/c)
TypeError: unsupported operand type(s) for /: 'B' and 'C'
La ligne en question est celle de l'instruction print .

Par contre sous Python 3.4 marche.

Quelqu'un pourrait-il me dire ce qui se passe? Je n'y comprends rien.

Merci