Инициализация self.argument = argument
не на самом деле инициализирует сам объект (список), он просто устанавливает произвольный атрибут с именем argument
.
Если вы используете полуприличную IDE, вы должны увидеть предупреждение: 1007 *.
Если вы сделаете это, вы получите свой список:
class ListChild(list):
def __init__(self, argument):
super().__init__(argument)
# self.argument = argument
print(ListChild([1, 2, 3]))
# [1, 2, 3]
И вам даже не нужно self.argument
.
Теперь вы увидите то же самое предупреждение и при создании подкласса int
.Разница между int
и list
заключается в том, что int
является примитивным и работает немного по-другому.Вам даже не нужно передавать argument
в super().__init__
.Однако вам необходимо передать его IntChild.__init__
:
class IntChild(int):
def __init__(self, argument):
super().__init__()
print(IntChild(3))
# 3
См. этот вопрос для получения более подробной информации о том, как int
работает.
Пользователям предлагается:подкласс collections.UserList
и collections.UserString
вместо list
и str
напрямую, однако UserInt
нет.