天天看点

8 多态和多态类

一、多态

多态是指:一类事物的多种形态,,(一个抽象类有多个子类,因而多态的概念依赖于继承)

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’)

四、小结

多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) 多态性:一种调用方式,不同的执行效果(多态性)