python3面向对象--python3中的多态

Myth丶恋晨 2023-01-12 15:58 258阅读 0赞

内容简介:

封装,继承,多态是面向对象的三大特性。Python是面向对象的语言,当然也有这三个特性。本节介绍的是其中一个:多态。

多态,简单理解为多种形态。对于同一个方法(该方法为父类方法,子类继承而来),可以有不同的行为,从而执行结果也不一样。

这种不同的行为的产生,是由于真正的子类实例的这个方法的实现不同而造成的。而这些不同的子类就形成了多种形态。

多态的分类:

多态性分为静态多态性和动态多态性,

  静态多态性:在运行之前就知道该用哪个类型的实例,例如,任何类型都可以用运算符+进行运算

  动态多态性:在运行过程中,才知道使用哪个类的实例。例如,下面的例子。

动态多态性举例:

  1. #!/usr/bin/python3
  2. # -*- coding: UTF-8 -*-
  3. #Persion类
  4. class Persion:
  5. age = 1;
  6. sex = True; #True:男; False:女
  7. def __init__(self):
  8. self.age = 1;
  9. print("[Persion][init]==age==",self.age);
  10. def getAge(self):
  11. return self.age;
  12. def getSex(m):
  13. return m.sex;
  14. def sayHello(self):
  15. print("hello world!");
  16. def eat(self):
  17. print("Hi !!!");
  18. def eat(self): #吃饭
  19. pass;
  20. class Boy(Persion):
  21. __name = '';
  22. def __init__(self):
  23. super().__init__();
  24. print("[Boy][init]==age==",self.age);
  25. def setName(self,name):
  26. self.__name = name;
  27. def eat(self): #男孩喜欢吃肉
  28. super().eat(); #调用父类的eat方法
  29. print("[Boy] like eat meat !!!");
  30. class Girl(Persion):
  31. __name = '';
  32. def __init__(self):
  33. super().__init__();
  34. print("[Girl][init]==age==",self.age);
  35. def setName(self,name):
  36. self.__name = name;
  37. def eat(self): #女孩喜欢吃米饭
  38. super().eat(); #调用父类的eat方法
  39. print("[Girl] like eat rice !!!");
  40. def eat(persion): #多态的体现,既可以是boy,也可以是个girl
  41. persion.eat();
  42. boy = Boy();
  43. girl = Girl();
  44. eat(boy);
  45. eat(girl)

运行结果:

  1. python3 eat.py
  2. [Persion][init]==age== 1
  3. [Boy][init]==age== 1
  4. [Persion][init]==age== 1
  5. [Girl][init]==age== 1
  6. [Boy] like eat meat !!!
  7. [Girl] like eat rice !!!

可见,对于eat(persion)方法而言,根据不同的参数的类型,会调用不同类型实例的eat方法,而这些子类的eat方法,又必须继承自父类。


发表评论

表情:
评论列表 (有 0 条评论,258人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python3面向对象

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Bas