Python学习笔记 22

多态

面向对象三大特征及作用:

  • 封装:确保对象中的数据安全
  • 继承:保证了对象的可扩展性
  • 多态:保证了程序的灵活性

多态我自己简单总结一句话:使用方法(或者其他…)时,不用考虑对象类型,适用性强,比如常见的len( )

# 多态
# 狗(哈士奇,泰迪,金毛。。)
# 一个对象可以以不同的形态去呈现

class A :
	def __init__ (self,name):
		self._name = name
	@property
	def name(self):
		return self._name
	@name.setter
	def name(self,name):
		self._name = name

class B :
	def __init__ (self,name):
		self._name = name
	@property
	def name(self):
		return self._name
	@name.setter
	def name(self,name):
		self._name = name

a = A('小王')
b = B('老刘')

# 对于say_hello( )函数来说,只要对象中含有name属性,他就可以作为参数传递
# 	这个函数并不会考虑对象的类型,只要有name属性即可
# 典型多态:
def say_hello (obj):
	print('你好 %s'%obj.name)

say_hello(a)
say_hello(b)

# say_hello_2( )做了类型检查,违反了多态的函数,只适用于一种类型的对象,
# 无法处理其他类型的对象,导致函数的适应性非常差
# 注意:像isinstance( )这种使用了会违反多态的函数,开发中一般不会使用
def say_hello_2 (obj):
	if isinstance(obj,A) :
		print('你好 %s'%obj.name)


# 多态典型:
# 	鸭子例子
# 	如果一个东西,走路像鸭子,叫声像鸭子,那么他就是鸭子

# len( )
# 之所以一个对象能通过len( )获取长度,是因为对象有一个特殊方法__len__
# 只要对象中有__len__特殊方法,就能够通过len( )来获取它的长度
l = [1,2,3]
s = 'hello'

print(len(l))
print(len(s))

猜你喜欢

转载自blog.csdn.net/weixin_44011689/article/details/89851852