Сомнения в коде Python

Я читаю книгу Алгоритмов в Python, и я также новичок в Python.

Я не могу понять этот пример:

class Bunch(dict): def __init__(self, *args, **kwds): super(Bunch, self).__init__(*args, **kwds) self.__dict__ = self x = Bunch(name="Jayne Cobb", position="Public Relations") print x.name 

Некоторые вопросы:

  • В чем смысл * и ** в параметрах «args» и «kwds»?
  • В чем смысл «супер»?
  • В этом классе мы расширяем класс «dict»? Это встроенный класс?

С наилучшими пожеланиями,

*args означает: Соберите все дополнительные параметры без имени в этом списке:

 def x(a, *args): pass x(1, 2, 3) 

присваивает a=1 и args=[2,3] .

**kwargs присваивает все дополнительные параметры с именем dict kawrgs :

 def x(a, **kw): pass x(1, b=2, c=3) 

присваивает a=1 и kw={b=2, c=3} .

Код super(Bunch, self).__init__(*args, **kwds) читает: Вызовите метод __init__ из Bunch с экземпляром self и параметрами *args, **kwds . Это стандартный шаблон для инициализации суперклассов ( docs for super )

И да, dict – это встроенный тип данных для словарей .

В этом классе мы расширяем класс «dict»? Это встроенный класс?

Фактически вы расширяете базовый класс dict . Это родной класс в Python. В предыдущих версиях Python вы не могли расширять родные классы, но это изменилось с классами нового стиля .

В чем смысл «супер»?

Функция super позволяет вам найти родителей данного класса, используя тот же порядок, который будет использоваться для наследования.

В чем смысл * и ** в параметрах «args» и «kwds»?

*args расширен с кортежем, содержащим **kwargs аргументы, тогда как **kwargs расширяется до словаря, содержащего именованные аргументы. Это способ управления функциями с переменным числом аргументов.