我有这个密码:
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()
的正确语法是什么呢?你知道吗
在Python 2中,要使用^{} ,必须使用新样式的类:
必须将当前类和实例显式传递给
super
:在python3中,您不会遇到这些问题,因为所有类都是新样式的,
super
会推断出所需的参数。尽管这可能超出了问题的范围,但您确实应该考虑切换到Python3。你知道吗Python中的方法名通常以小写字母开头。这不是一条很难的规则,但它可以使其他Python程序员(比如我)更容易理解您的代码。你知道吗
这个问题似乎类似于this one。在Python 2.7中,对super的函数调用需要以下参数:
根类需要从对象类继承:
在这样做的过程中,您将类定义为一个新样式的类,它是python3.0的标准,具有一系列的优点。你知道吗
在Python 2.7中,必须这样编写:
详情请参阅^{}'s Python 2.7 documentation 。你知道吗
相关问题 更多 >
编程相关推荐