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

在尝试使用`super()`初始化Python2代码时遇到了'TypeError: super() takes at least 1 argument (0 given)'的错误。问题在于`super()`在Python3中的用法不适用于Python2。根据《python编程:从入门到实践》的建议修改代码后,又出现了'TypeError: super() argument 1 must be type, not classobj'的新错误。通过研究Stack Overflow上的解决方案,找到了两种在Python2中正确使用`super()`的方法,这两种方法在执行后都能得到预期结果。" 137969513,10912945,"R语言卡方分布实战:dchisq, pchisq, qchisq & rchisq

在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);#注意此处参数含self
		self.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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值