python 调用super()初始化报错“TypeError: super() takes at least 1 argument”

来源:互联网 发布:网上商城源码 java 编辑:程序博客网 时间:2024/06/16 21:18

在python中有如下代码:

class father():def __init__(self,age):self.age = age;def get_age(self):print(self.age);class son(father):def __init__(self,age):super().__init__(age);self.toy_number = 5;def get_toy_number(self):print(self.toy_number);myson = son(6)myson.get_age()myson.get_toy_number()

运行时报错:“TypeError: super() takes at least 1 argument(0 given)”


原因是该方法调用super()为在python3中的方法,而此是在python2中运行的,在python3中运行将正常。


在《python编程:从入门到实践》一书中介绍了若想在python2中运行需将 

super().__init__(age);

一句改为:

super(son, self).__init__(age);

但我按此方法改后,运行时报错:“TypeError: super() argument 1 must be type, not classobj”


上网查询资料后,得知若想要在python2中运行成功,可以改为如下两种方法:
方法一:

class father(object):def __init__(self,age):self.age = age;def get_age(self):print(self.age);class son(father):def __init__(self,age):super(son, self).__init__(age);self.toy_number = 5;def get_toy_number(self):print(self.toy_number);myson = son(6)myson.get_age()myson.get_toy_number()

方法二:

class father():def __init__(self,age):self.age = age;def get_age(self):print(self.age);class son(father):def __init__(self,age):father.__init__(self,age);#注意此处参数含selfself.toy_number = 5;def get_toy_number(self):print(self.toy_number);myson = son(6)myson.get_age()myson.get_toy_number()

运行后都将得到正确答案:

参考链接:https://stackoverflow.com/questions/9698614/super-raises-typeerror-must-be-type-not-classobj-for-new-style-class


阅读全文
0 0
原创粉丝点击