一、多态
多态是指:一类事物的多种形态,,(一个抽象类有多个子类,因而多态的概念依赖于继承)
1.1 多态的特征
-
序列数据类型有多种形态:字符串,列表,元组
-
动物有多种形态:人,狗,猪
-
多态可以具有约束性(一般情况都有约束性,在其他语言中约束性很强)
- 法1
class Animal: def speak(self): pass class Pig(Animal): def speak(self): print("哼哼哼") class Dog(Animal): def speak(self): print("汪汪汪") class People(Animal): def speak(self): print("say hello")
- 法2
#用abc实现接口的统一化,约束代码(用的比较少) import abc #1 在父类括号内中写metaclass=abc.ABCMeta class Animal(metaclass=abc.ABCMeta): #2第二在要约束的方法上,写@abc.abstractmethod @abc.abstractmethod def speak(self): pass class Pig(Animal): # def aaa(self): # print('哈哈哈') # 如果子类中没有speak方法,就会报错 def speak(self): print('哼哼哼') pig = Pig()
-
法三
#用异常处理来实现 class Animal(): def speak(self): # 主动抛出异常 raise Exception('必须要重写哦') class Pig(Animal): #如果没有会报错 def speak(self): print('哼哼哼') pig = Pig()
-
鸭子类:只要走路像鸭子(对象中有某个绑定方法),那你就是鸭子
class Pig: def speak(self): print('哼哼哼') class People: def speak(self): print('哈哈哈') pig = Pig() people = People() def animal_speak(obj): obj.speak() animal_speak(pig) animal_speak(people)
二、多态性
多态性是指:具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
- 多态性:多种形态的不同体现
- 多态性依赖于:继承
- 多态性:定义统一的接口
class Animal:
def speak(self):
pass
class Pig(Animal):
def speak(self):
print("哼哼哼")
class Dog(Animal):
def speak(self):
print("汪汪汪")
class People(Animal):
def speak(self):
print("say hello")
pig = Pig()
dog = Dog()
people = People()
def animal_speak(obj):
obj.speak()
animal_speak(pig)
animal_speak(dog)
animal_speak(people)
#
哼哼哼
汪汪汪
say hello
2.1 多态性的优点
- 增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
- 增加了程序额可扩展性:通过继承Animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
三 linux中的多态与多态性
- 传统的写法
class File:
def read(self):
pass
def write(self):
pass
#内存类
class Memory(File):
def read(self):
print("Memory....read")
def write(self):
print('Memory.....write')
-
鸭子类型的写法
class Memory: def read(self): print("Memory....read") def write(self): print('Memory.....write') class Network: def read(self): print("Memory....read") def write(self): print('Memory.....write')
四、小结
多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度)
多态性:一种调用方式,不同的执行效果(多态性)