Wesh les mecs,
à force de faire des test A/B, je suis tombé sur ce code. Certes, c'est de la masturbation intellectuelle, mais ça me casse les bonbons de pas comprendre.
Jvous explique: dans ma tête, on utilise un super() dans une subclass pour faire "descendre" des attributs de la superclass. Jsuis pas programmeur mais je pense que c'est l'usage le plus courant et surtout le plus intuitif. En plus, je suppose qu'une valeur au moins est toujours introduite quand on appelle les attributs à partir de l'objet.
Dans mon exemple 1, lorsqu'on fait descendre la valeur True de la superclass, elle est overriden par False de la subclass. Or, moi je pensais que True de la superclass était appelé directement par la ligne super() sans passer par les paramètres de la subclass. Apparemment, c'est pas le cas.
Et dans l'exemple 2, super() vient directement récupérer la valeur True de la superclass, sans passer par les paramètres de la subclass. C'est l'inverse. Pourtant c'est quasi la même structure.
C'est un bordel cette affaire.
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 # 1 class A: def __init__(self, value = True): print(value) class B(A): def __init__(self, value = False): super().__init__(value) print(value) b = B() # False False # 2 class A: def __init__(self, value): self.value = value = True print(value) class B(A): def __init__(self, value = False): super().__init__(value) print(value) b = B() # True False
Partager