面向对象——多态性

  • 多态:指的是一类事物有多种形态,比如,动物有多种形态:人,狗,猪
  • 多态性:指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性
    • 静态多态性:如任何类型都可以用运算符+进行运算
    • 动态多态性:通过定义一个统一的接口来使用
  • 好处
    • 增加程序的灵活性:以不变应万变,不论对象千变万化,使用者都是用同一种形式去调用,如
      func(animal)
    • 增加程序的可扩展性
      • 通过继承animal类创建一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
 1 #多态:同一类事物的多种形态
 2 import abc
 3 class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
 4     @abc.abstractmethod
 5     def talk(self):
 6         pass
 7 
 8 class People(Animal): #动物的形态之一:人
 9     def talk(self):
10         print('say hello')
11 
12 class Dog(Animal): #动物的形态之二:狗
13     def talk(self):
14         print('say wangwang')
15 
16 class Pig(Animal): #动物的形态之三:猪
17     def talk(self):
18         print('say aoao')
19 
20 class Cat(Animal):
21     def talk(self):
22         print('say miamiao')
23 
24 #多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象
25 peo1=People()
26 dog1=Dog()
27 pig1=Pig()
28 cat1=Cat()
29 
30 # peo1.talk()
31 # dog1.talk()
32 # pig1.talk()
33 
34 def func(animal):
35     animal.talk()
36 
37 
38 func(peo1)#say hello
39 func(pig1)#say aoao
40 func(dog1)#say wangwang
41 func(cat1)#say miamiao
  •  鸭子类型
    • python崇尚鸭子类型,即如果看起来像,叫声像而且走起路来像鸭子,那么它就是鸭子
    • python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象
    • 也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度
    •  1 #序列类型:列表list,元祖tuple,字符串str
       2 
       3 l=list([1,2,3])
       4 t=tuple(('a','b'))
       5 s=str('hello')
       6 
       7 # print(l.__len__())
       8 # print(t.__len__())
       9 # print(s.__len__()
      10 
      11 # def len(obj):
      12 #     return obj.__len__()
      13 
      14 print(len(l))
      15 print(len(t))
      16 print(len(s))
      序列类型
原文地址:https://www.cnblogs.com/GraceZ/p/8079245.html