这是python中super的正确用法吗?

时间:2011-11-22 07:00:56

标签: python django

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 个答案:

答案 0 :(得分:1)

super用于classmethods的通常用法是先放置 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 具有相同的模式。

参考文献: