python子类调用父类的构造方法实现方案

python中,类的构造方法是__init__()。当一个类被子类继承且子类重写了构造方法后,若子类还想使用父类的构造方法, 如果直接通过创建的子类对象调用父类的方法会报错。解决办法有两个:一个是调用超类方法的未绑定版本,一个是使用super函数
见下面的例子
class Bird(object):	
	def __init__(self):
		self.hungry = True		
	def eat(self) :		
		if self.hungry:			
			print("Aaaah")			
			self.hungry = False		
		else:			
			print("No thanks.")

>>>b = Bird()
>>> b.eat()
Aaaah
>>> b.eat()
No thanks
给鸟这个类(class Bird)创建子类,会唱歌的鸟类
class SongBird (Bird):
	def __init__(self):
		self.sound = "Squawk"
	def sing(self):
		print(self.sound)

>>> sb = SongBird()
>>>sb.sing()
Squawk
也许一般大家都会想到,既然SongBird是Bird的一个子类,那么 SongBird应该也就继承了Bird的方法eat,事实上上述代码做不到这个功能。
下面调用会报错
>>>sb.eat()

改进方法之一:使用未绑定的超类的构造方法
class SongBird (Bird):
	def __init__(self):
		Bird.__init__(self)#使用未绑定的超类的构造函数
		self.sound = "Squawk":
	def sing(self):
		print(self.sound)

然后再来使用就没用问题了

>>> sb = SongBird()
>>>sb.sing()
Squawk
>>> sb.eat()
Aaaah
>>> sb.eat()
No thanks
方法二:
class SongBird (Bird):
	def __init__(self):
		super(SongBird,self).__init__(self)#使用super函数,格式:super(父类,self).__init__(self)
		self.sound = "Squawk"
	def sing(self):
		print(self.sound)

>>>sb.sing()
Squawk
>>> sb.eat()
Aaaah
>>> sb.eat()
No thanks
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值