Я наконец обновил мою версию python, и я обнаружил новые добавленные функции. Среди прочего, я почесал голову вокруг нового метода __init_subclass__
. Из документов:
Этот метод вызывается всякий раз, когда содержащийся класс является подклассом. ЦБС является новым подклассом. Если он определен как обычный метод экземпляра, это метод неявно преобразован в метод класса.
Итак, я начал немного поиграть с ним, следуя примеру в документах:
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)
Производит этот вывод:
Called __init_subclass(<class '__main__.AustralianPhilosopher'>, 'Bruce')
'Set name to Hegel'
Called __init_subclass(<class '__main__.GermanPhilosopher'>, 'Nietzsche')
'Bruce'
'Nietzsche'
Я понимаю, что этот метод вызывается после определения подкласса, но мои вопросы касаются, в частности, использования этой функции. Я прочитал статью __set_name__
, чтобы полностью понять его использование?