Je suivais un tutoriel en ligne et le code est ceci:Dériver une liste python
class Hands(list):
def __init__(self, size=0, die_class=None, *args, **kwargs):
if not die_class:
raise ValueError("You must provide a die class")
super().__init__()
for _ in range(size):
self.append(die_class())
Il essentiellement des modèles un joueur avec un certain nombre de dés (size
) et ce dés qu'ils détiennent (die_class
).
Ma confusion est pourquoi avons-nous besoin d'appeler super().__init__
? J'ai essayé d'exécuter le code sans cela et ça a bien fonctionné! Pourquoi l'appel est-il nécessaire?
même si cela fonctionne maintenant car 'list' ne semble pas avoir besoin d'un constructeur par défaut, que se passe-t-il si les prochaines versions de python nécessitent que' __init__' soit appelé sur un objet 'list'? pourquoi _not_ appelant '__init__'? –
Ce n'est pas nécessaire (mais c'est une bonne pratique), voir https://softwareengineering.stackexchange.com/questions/318165/is-calling-the-superclass-constructor-in-a-subclass-really-important –
Je pense que ça casse Principe de Liskov. ça marche, d'accord, mais quand cela va-t-il se briser? –