J'ai enfin mis à jour ma version de python et j'ai été découvrir les nouvelles fonctionnalités ajoutées. Entre autres choses, j'ai été de me gratter la tête autour de la nouvelle - __init_subclass__
méthode. À partir de la documentation:
Cette méthode est appelée à chaque fois que le contenant de la classe est sous-classé. cls est alors la nouvelle sous-classe. Si elle est définie comme une instance normale de la méthode, ce la méthode est implicitement converti à une méthode de classe.
J'ai donc commencé à jouer avec elle un peu, en suivant l'exemple de la doc:
class Philosopher:
def __init_subclass__(cls, default_name, **kwargs):
super().__init_subclass__(**kwargs)
print(f"Called __init_subclass({cls}, {default_name})")
cls.default_name = default_name
class AustralianPhilosopher(Philosopher, default_name="Bruce"):
pass
class GermanPhilosopher(Philosopher, default_name="Nietzsche"):
default_name = "Hegel"
print("Set name to Hegel")
Bruce = AustralianPhilosopher()
Mistery = GermanPhilosopher()
print(Bruce.default_name)
print(Mistery.default_name)
Produit de cette sortie:
Called __init_subclass(<class '__main__.AustralianPhilosopher'>, 'Bruce')
'Set name to Hegel'
Called __init_subclass(<class '__main__.GermanPhilosopher'>, 'Nietzsche')
'Bruce'
'Nietzsche'
Je comprends que cette méthode est appelée après la définition de sous-classe, mais mes questions sont particulièrement à propos de l'utilisation de cette fonctionnalité. J'ai lu le PEP 487 article, mais ne m'aide pas beaucoup. Où serait cette méthode-il être utile? Est-ce pour:
- la super-classe d'enregistrer les sous-classes lors de la création?
- forcer la sous-classe pour définir un champ à la définition du temps?
Aussi, dois-je comprendre l' __set_name__
pour bien comprendre son utilisation?