类的“多态”

python

多态

1)、什么是多态

   多态指的是同一种类型的事物,不同的形态

 

2)、多态的目的

  “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)

 

3)、多态的三种表现形式

  ① 继承父类

  ② 继承抽象类

  ③ 鸭子类型

 

 

1、继承父类

  多态的表现 “形式之一” 就是 继承父类

 

  如何实现:

    - 先抽象(即总结子类和父类的相同属性及方法),再继承

    父类:定制一套统一的规范(比如:方法名统一)

    子类:继承父类,遵循父类的统一的规范(比如:子类遵循父类方法名的统一)

 

# 动物类

class Animal:

def eat(self):

pass

def speak(self):

pass

# 猪类

class Pig(Animal):

def eat(self):

print("bia叽...")

def speak(self):

print("哼哼哼...")

# 猫类

class Cat(Animal):

def eat(self):

print("咬叽...")

def speak(self):

print("喵喵喵...")

# 狗类

class Dog(Animal):

def eat(self):

print("舔叽...")

def speak(self):

print("汪汪汪...")

animal1 = Pig()

animal2 = Cat()

animal3 = Dog()

animal1.speak()

animal2.speak()

animal3.speak()

  执行结果:

哼哼哼...

喵喵喵...

汪汪汪...


注意:在python中不会强制限制 子类 必须要遵循 父类 的规范,所以出现了 继承抽象类

 

 

2、继承抽象类

1)什么是抽象类

  在python内置的abc模块中,有一个抽象类,使用此类,使子类必须遵循父类的编码规范(不遵循,调用即报错)

 

2)抽象类的作用

  让子类必须遵循父类的编码规范

 

3)如何实现抽象类

 

  父类需要继承abc模块中:metaclass=abc.ABCMeta

  在父类的需要遵循编码规范的方法上装饰上abc.abstractmethod

 

注意:子类必须要按照父类的方法编写规范,缺一不可。(只要父类中有几个抽象方法,子类就要有几个抽象方法)

 

  例:写一个抽象类

import abc

# 父类需要继承abc模块中:metaclass=abc.ABCMeta

class Animal(metaclass=abc.ABCMeta):

# 在父类的需要遵循编码规范的方法上装饰上abc.abstractmethod

@abc.abstractmethod

def eat(self):

pass

# 在父类的需要遵循编码规范的方法上装饰上abc.abstractmethod

@abc.abstractmethod

def speak(self):

pass

# 猪类

class Pig(Animal):

# 根据父类编码规范必须要有eat方法(方法名不能变)

def eat(self):

print("bia叽...")

# 根据父类编码规范必须要有speak方法(方法名不能变)

def speak(self):

print("哼哼哼...")

# 此方法无要求,可有可无

def run(self):

print("pig is running...")

pig_obj = Pig()

 

 

3、鸭子类型

1)什么是鸭子类型

  不同的对象,只要长得像鸭子,动物行为像鸭子,那就是鸭子!

  “鸭子类型” 是多态的表现形式之一

 

  PS:多态(继承父类、继承抽象类、鸭子类型)其实就是代码的规范形式,即编码规范

 

2)如何实现鸭子类型

  不同对象,先抽象出相同类型的方法,给他们定制一套统一的规范

  所有的类,在定义时都按照统一的规范进行编写

 

注意:在python中,强烈推荐鸭子类型

 

# 动物类:定义代码规范

class Animal:

def eat(self):

pass

def speak(self):

pass

# 猪类:按照动物类的代码规范来编写

class Pig:

def eat(self):

print("bia叽...")

def speak(self):

print("哼哼哼...")

# 猫类:按照动物类的代码规范来编写

class Cat:

def eat(self):

print("咬叽...")

def speak(self):

print("喵喵喵...")

# 狗类:按照动物类的代码规范来编写

class Dog:

def eat(self):

print("舔叽...")

def speak(self):

print("汪汪汪...")

 

 

4、多态总结

  多态的三种表现形式:

    继承父类:

      耦合度高,程序的可扩展性低

    继承抽象类:(强烈不推荐使用)

      耦合度极高,程序的扩展性极低

    鸭子类型:(强烈推荐使用)

      耦合度低,程序的可扩展性高

以上是 类的“多态” 的全部内容, 来源链接: utcz.com/z/530235.html

回到顶部