在python中使用super().Sub(n1,n2)时出错

2024-09-30 00:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码:

class Operation:
    def Sum(self,n1,n2):
        SumResult=n1+n2
        print("Sum=",SumResult)
    def Sub(self,n1,n2):
        SubResult=n1-n2
        print("Sub=",SubResult)

class OperationWithMul(Operation):
    def Mul(self,n1,n2):
        MulResult=n1*n2
        print("Mul=",MulResult)
    def Sub(self,n1,n2):
        super().Sub(n1,n2)

def main():
    OpMul=OperationWithMul();
    OpMul.Sub(4,2)
    OpMul.Sum(10,15)
    OpMul.Mul(10,2)

if __name__ == '__main__':
    main()

但当我运行它时,我得到了一个错误:

> Traceback (most recent call last):   File
> "C:/path/OOPOverride.py", line
> 32, in <module>
>     if __name__ == '__main__':main()   File "C:/path/OOPOverride.py", line
> 24, in main
>     OpMul.Sub(4,2)   File "C:/path/OOPOverride.py", line
> 14, in Sub
>     super(Operation).Sub(n1,n2) TypeError: must be type, not classobj

当我把鼠标放在super()函数上时,它告诉我

> Python version 2.7 does not support this syntax. super() should have
> arguments in Python

那么在这里使用super()的正确语法是什么呢?你知道吗


Tags: pathinselfmaindefoperationfilesum
3条回答

在Python 2中,要使用^{},必须使用新样式的类:

class Operation(object):  # makes the base-class a new-style class
    # your code

class OperationWithMul(Operation):
    # your code

# ...

必须将当前类和实例显式传递给super

super(OperationWithMul, self).Sub(n1, n2)

在python3中,您不会遇到这些问题,因为所有类都是新样式的,super会推断出所需的参数。尽管这可能超出了问题的范围,但您确实应该考虑切换到Python3。你知道吗

Python中的方法名通常以小写字母开头。这不是一条很难的规则,但它可以使其他Python程序员(比如我)更容易理解您的代码。你知道吗

这个问题似乎类似于this one。在Python 2.7中,对super的函数调用需要以下参数:

super(OperationWithMul,self).Sub(n1,n2)

根类需要从对象类继承:

class Operation(object):

在这样做的过程中,您将类定义为一个新样式的类,它是python3.0的标准,具有一系列的优点。你知道吗

在Python 2.7中,必须这样编写:

super(OperationWithMul, self).Sub(n1,n2)

详情请参阅^{}'s Python 2.7 documentation。你知道吗

相关问题 更多 >

    热门问题