Сомнения в коде 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»? Это встроенный класс?
С наилучшими пожеланиями,
- алгоритм декодирования строки для рекомендаций
- Справка по геометрии Windows в Python
- Что случилось с этой реализацией quicksort?
- Ориентированный лес TAoCP – Алгоритм в python
- Существуют ли алгоритмы выбора функций, которые могут быть применены к входам категориальных данных?
*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
– это встроенный тип данных для словарей .
-
http://docs.python.org/reference/compound_stmts.html#function-definitions . Объясняет
*
и**
. -
http://docs.python.org/library/functions.html?highlight=super#super . Объясняет супер
-
http://docs.python.org/library/stdtypes.html#mapping-types-dict . Объясняет dict.
В этом классе мы расширяем класс «dict»? Это встроенный класс?
Фактически вы расширяете базовый класс dict
. Это родной класс в Python. В предыдущих версиях Python вы не могли расширять родные классы, но это изменилось с классами нового стиля .
В чем смысл «супер»?
Функция super
позволяет вам найти родителей данного класса, используя тот же порядок, который будет использоваться для наследования.
В чем смысл * и ** в параметрах «args» и «kwds»?
*args
расширен с кортежем, содержащим **kwargs
аргументы, тогда как **kwargs
расширяется до словаря, содержащего именованные аргументы. Это способ управления функциями с переменным числом аргументов.
- Шифрование 30-битного номера в 6 символов Буквенно-цифровая строка
- Как передать List в качестве аргумента функции в threading.Timer
- Реализация быстрого сортировки с медианой трех
- Реализация алгоритма умножения Карацубы в Python
- Python – программа после рефакторинга возвращает другой результат
- группировка списка элементов по кумулятивному размеру с ограничением по размеру групп
- Быстрый способ получить случайный индекс из массива весов в python
- Автоматическое распознавание шаблонов изображений
- Выберите три разных значения из списка в Python
- Python reverse quicksort
- почему мой кезерный шифр печатает только последнюю букву строки? питон