Это правильное использование супер в Python? - PullRequest
0 голосов
/ 22 ноября 2011
class SessionWizardView(WizardView):
    @classonlymethod
    def as_view(cls, *args, **kwargs):
        #...snipped..
        pass

class ParentWizard(SessionWizardView):
    @classonlymethod
    def as_view(cls, *args, **kwargs):
        return super(SessionWizardView, cls).as_view( ... )

class ChildWizard(ParentWizard):
    @classonlymethod
    def as_view(cls, *args, **kwargs):
        return super(SessionWizardView, cls).as_view( ... )

В ChildWizard допустимо ли передавать в классе прародителя (SessionWizardView) первый параметр super?pylint вызывает рвоту это сообщение об ошибке:

Метод должен иметь "self" в качестве первого аргумента

Неверный первый аргумент 'SessionWizardView', данный суперклассу

1 Ответ

1 голос
/ 22 ноября 2011

Обычное использование super для методов класса состоит в том, чтобы поставить cls первым и имя текущего класса в качестве второго аргумента:

class SessionWizardView(WizardView):
    @classonlymethod
    def as_view(cls, *args, **kwargs):
        #...snipped..
        pass

class ParentWizard(SessionWizardView):
    @classonlymethod
    def as_view(cls, *args, **kwargs):
        return super(cls, ParentWizard).as_view( ... )

class ChildWizard(ParentWizard):
    @classonlymethod
    def as_view(cls, *args, **kwargs):
        return super(cls, ChildWizard).as_view( ... )

Если вы создаете рабочий код, который проходит тесты, я бы не стал сильно беспокоиться о том, как pylint сообщает о присвоении имени первому аргументу. pylint знает, что стандартный Python classmethod будет использовать cls в качестве первого аргумента, но он ничего не знает о classonlymethod , который имеет тот же шаблон.

Ссылки

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