object.__init_subclass__
Позволяет произвести дополнительную инициализацию класса-наследника.
object.__init_subclass__(cls)
-> None
cls -- Инициализируемый класс-наследник.
Вызывается всякий раз, когда происходит наследование от класса, в котором данный метод определён.
Использование метода упрощает выполнение некоторых типов задач, которые ранее решались при помощи метаклассов.
Использование метода упрощает выполнение некоторых типов задач, которые ранее решались при помощи метаклассов.
На заметку
Реализация метода по умолчанию не делает ничего. Однако поднимает TypeError, если ей переданы аргументы.
class Base:
"""Базовый класс, обрабатывающий инициализацию наследников."""
registry = []
def __init_subclass__(cls, my_arg='some'):
super().__init_subclass__()
# Для примера создадим реестр всех наследников.
cls.registry.append(cls)
# Выводим аргумент.
print(my_arg)
class Child1(Base):
"""Первый класс наследник."""
class Child2(Base, my_arg='two'):
"""Второй наследник. Обратите внимание на возможность
передачи аргумента в инициализатор на примере my_arg.
"""
class SubChild1(Child1, my_arg='sub'):
"""И вложенный наследник."""
# print в инициализаторе выведет:
# some
# two
# sub
# А теперь посмотрим, что накопилось в реестре наследников:
print(Base.registry)
# [<class '__main__.Child1'>, <class '__main__.Child2'>, <class '__main__.SubChild1'>]
На заметку
Метаклассы никогда не передаются в данный метод.
Синонимы поиска: object.__init_subclass__, object, __init_subclass__
В разделе «object (объект)»:
file (файл)
object.__add__
object.__bool__
object.__call__
object.__ceil__
object.__class__
object.__cmp__
object.__contains__
object.__copy__
object.__deepcopy__
object.__del__
object.__delattr__
object.__delete__
object.__delitem__
object.__delslice__
object.__dir__
object.__enter__
object.__eq__
object.__exit__
object.__floor__
object.__format__
object.__ge__
object.__get__
object.__getattr__
object.__getattribute__
object.__getitem__
object.__getslice__
object.__getstate__
object.__gt__
object.__hash__
object.__init__
object.__iter__
object.__le__
object.__len__
object.__lt__
object.__missing__
object.__ne__
object.__new__
object.__next__
object.next
object.__nonzero__
object.__qualname__
object.__rcmp__
object.__repr__
object.__reversed__
object.__set__
object.__setattr__
object.__setitem__
object.__set_name__
object.__setslice__
object.__setstate__
object.__slots__
object.__str__
object.__sub__
object.__subclasses__
object.__unicode__
property (свойство)
Protocols (протоколы)
slice (срез)
Встроенные исключения
На заметку
В соответствующем разделе вы можете зарегистрировать сообщество по интересам, чтобы о нём узнали и другие посетители сайта — возможно, так вы отыщите новых единомышленников и друзей.. И не важно виртуальное оно, или вполне реальное, давно существующее, или только-только придуманное.