从0.1开始学Python——[22]
面向对象的三大特征,之前的封装、继承,加上现在将要学习的多态。
多态
字面意思上讲就是多种形态。
class Slj():
def __init__(self,who):
self._who = who
@property
def who(self):
return self._who
@who.setter
def who(self,who):
self._who = who
class Wthg():
def __init__(self,who):
self._who = who
@property
def who(self):
return self._who
@who.setter
def who(self,who):
self._who = who
s = Slj('水龙敬')
w = Wthg('武田弘光')
def yuanzuo(a):
print('原作 %s'%a.who)
yuanzuo(s)
yuanzuo(w)
原作 水龙敬
原作 武田弘光
从上面的代码可以看到,s、w两个对象,分不属于不同的类,但是相同点是二者都有相同的属性名的属性,也就是说yuanzuo(a)这个函数,不会管输入的对象是不是一个类,只要有同一种属性就行。也就是说,只要有这个who属性,什么类的对象都能调用这个函数,这就是多态的表现形式。
如果加一个类型检查,比如加一个条件为isinstance(对象形参,某个类)判断语句,这样就会违反多态。这种函数只会适用于一种类型的对象,函数适应性自然会稍微差一些。所以开发过程中很少用,不建议使用。
def yuanzuo(a):
if isinstance(a,Slj):
print('原作 %s'%a.who)
else:
print('不干')
yuanzuo(s)
yuanzuo(w)
原作 水龙敬
不干
上面这叫就叫违反多态。
综述,面向对象的三大特征的作用可以概括为:
封装——保证对象数据安全
继承——保证对象可扩展性
多态——保证对象灵活性