В приведенных выше ответах super
инициализируется без каких-либо (ключевых слов) аргументов. Однако, часто вы хотели бы сделать это, а также передать некоторые «пользовательские» аргументы самостоятельно. Вот пример, который иллюстрирует этот вариант использования:
class SortedList(list):
def __init__(self, *args, reverse=False, **kwargs):
super().__init__(*args, **kwargs) # Initialize the super class
self.reverse = reverse
self.sort(reverse=self.reverse) # Do additional things with the custom keyword arguments
Это подкласс list
, который при инициализации немедленно сортирует себя в направлении, указанном аргументом ключевого слова reverse
, как показывают следующие тесты:
import pytest
def test_1():
assert SortedList([5, 2, 3]) == [2, 3, 5]
def test_2():
SortedList([5, 2, 3], reverse=True) == [5, 3, 2]
def test_3():
with pytest.raises(TypeError):
sorted_list = SortedList([5, 2, 3], True) # This doesn't work because 'reverse' must be passed as a keyword argument
if __name__ == "__main__":
pytest.main([__file__])
Благодаря передаче от *args
до super
список может быть инициализирован и заполнен элементами, а не только пустым. (Обратите внимание, что reverse
является аргументом только для ключевого слова в соответствии с PEP 3102 ).