Сомнения в коде Python - PullRequest
       3

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

2 голосов
/ 04 марта 2011

Я читаю книгу Алгоритмы на 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"? Это встроенный класс?

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

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

*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.Это стандартный шаблон для инициализации суперклассов ( документы для super)

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

3 голосов
/ 04 марта 2011
2 голосов
/ 04 марта 2011

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

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

Что означает «супер»?

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...