python3面向对象--python3中的多态
内容简介:
封装,继承,多态是面向对象的三大特性。Python是面向对象的语言,当然也有这三个特性。本节介绍的是其中一个:多态。
多态,简单理解为多种形态。对于同一个方法(该方法为父类方法,子类继承而来),可以有不同的行为,从而执行结果也不一样。
这种不同的行为的产生,是由于真正的子类实例的这个方法的实现不同而造成的。而这些不同的子类就形成了多种形态。
多态的分类:
多态性分为静态多态性和动态多态性,
静态多态性:在运行之前就知道该用哪个类型的实例,例如,任何类型都可以用运算符+进行运算
动态多态性:在运行过程中,才知道使用哪个类的实例。例如,下面的例子。
动态多态性举例:
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
#Persion类
class Persion:
age = 1;
sex = True; #True:男; False:女
def __init__(self):
self.age = 1;
print("[Persion][init]==age==",self.age);
def getAge(self):
return self.age;
def getSex(m):
return m.sex;
def sayHello(self):
print("hello world!");
def eat(self):
print("Hi !!!");
def eat(self): #吃饭
pass;
class Boy(Persion):
__name = '';
def __init__(self):
super().__init__();
print("[Boy][init]==age==",self.age);
def setName(self,name):
self.__name = name;
def eat(self): #男孩喜欢吃肉
super().eat(); #调用父类的eat方法
print("[Boy] like eat meat !!!");
class Girl(Persion):
__name = '';
def __init__(self):
super().__init__();
print("[Girl][init]==age==",self.age);
def setName(self,name):
self.__name = name;
def eat(self): #女孩喜欢吃米饭
super().eat(); #调用父类的eat方法
print("[Girl] like eat rice !!!");
def eat(persion): #多态的体现,既可以是boy,也可以是个girl
persion.eat();
boy = Boy();
girl = Girl();
eat(boy);
eat(girl)
运行结果:
python3 eat.py
[Persion][init]==age== 1
[Boy][init]==age== 1
[Persion][init]==age== 1
[Girl][init]==age== 1
[Boy] like eat meat !!!
[Girl] like eat rice !!!
可见,对于eat(persion)方法而言,根据不同的参数的类型,会调用不同类型实例的eat方法,而这些子类的eat方法,又必须继承自父类。
还没有评论,来说两句吧...