Python: как вы помните порядок аргументов `super`? - PullRequest
7 голосов
/ 03 июля 2010

Как видно из названия, как вы помните порядок аргументов super? Есть ли где-то мнемоника, которую я пропустил?

После нескольких лет программирования на Python мне все еще нужно его искать: (

(для записи, это super(Type, self))

Ответы [ 4 ]

11 голосов
/ 03 июля 2010

Наследование заставляет меня думать о классификации иерархия .И порядок аргументов super является иерархическим: сначала класс, затем экземпляр.

Другая идея, вдохновленная ответом ~ unutbu:

class Fubb(object):
    def __init__(self, *args, **kw):
        # Crap, I can't remember how super() goes!?

Этапы построенияправильный super() звонок.

__init__(self, *args, **kw)              # Copy the original method signature.

super(Fubb).__init__(self, *args, **kw)  # Add super(Type).
                     /
              -------
             /
super(Fubb, self).__init__(*args, **kw)  # Move 'self', but preserve order.
10 голосов
/ 03 июля 2010

Просто помните, что self является необязательным - super(Type) предоставляет доступ к несвязанным методам суперкласса - и необязательные аргументы всегда идут последними.

5 голосов
/ 03 июля 2010

Не знаю. В Python 3 мы можем просто написать

super().method(params)
2 голосов
/ 03 июля 2010

Обычно super используется внутри определения class.Там (как правило, опять же) первым аргументом super всегда должно быть имя class.

class Foo(object):
    def __init__(self,*args,**kw):
        super(Foo,self).__init__(*args,**kw)
...