python多态和鸭子类型

概述

python是一门解释语言,但是同java等静态语言一样,是可以通过继承的方式实现多态。而且python还有一个自己的特殊实现多态的方法,就是通过鸭子类型,来实现多态。

继承多态

通过严格的继承父类,重写父类的方法实现多态

class Person(object):
	
	def __init__(self, name, work=None):
		self.name = name
		self.work = None
	
	def msg(self):
		# 重载父类的msg方法
		print('my name is ' + self.name)


class Teacher(Person):
	def __init__(self, name, work='teacher'):
		super().__init__(name, work)

	def msg(self):
		print('my name is ' + self.name + ', my work is ' + self.work)

class Coder(Person):
	def __init__(self, name, work='coder'):
		super().__init__(name, work)

	def msg(self):
		print('my name is ' + self.name + ', my work is ' + self.work)

def show_msg(obj):
	obj.msg()

if __name__ == '__main__':
	laowang = Person('laowang')
	lw_t = Teacher('lw')
	lw_c = Coder('wcy')

	# 这些都是通过继承方式,创建的新对象,
	# 严格有Person的所有属性和方法,所以这种多态很好理解
	show_msg(laowang)
	show_msg(lw_t)
	show_msg(lw_c)

鸭子多态

python独特的实现多态的方式,通过Duck Typing。简而言之,不继承父类Person,但是也拥有Person一样的方法或者属性。即看起来像,就行。

# 接着上面的代码接着写
class Animal(object):
	def msg(self):
		print('animal do not need work')
# 严格意义上,Animal并没有继承Person父类
# 但是它模仿了Person父类,实现了msg方法,看起来像鸭子而已
cat = Animal()

# 所以由于python的解释性,将其定义为鸭子类型,同样实现了多态
show_msg(cat)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值