[toc]
什么是多态
多态的目的
多态性的好处
多条的表现"形式之一"就是继承:
class Animal:
# 方法 吃
def eat(self):
pass
# 方法 叫
def speak(self):
pass
# 猪类
class Pig(Animal):
def eat(self):
print(‘bia ji bia ji...‘)
def speak(self):
print(‘哼哼哼...‘)
# 猫类
class Cat(Animal):
def eat(self):
print(‘yao ji yao ji...‘)
def speak(self):
print(‘喵喵喵...‘)
# 狗类
class Dog(Animal):
def eat(self):
print(‘tian ji tian ji...‘)
def speak(self):
print(‘汪汪汪...‘)
animal1 = Pig()
animal2 = Cat()
animal3 = Dog()
# 吃起来
animal1.eat()
animal2.eat()
animal3.eat()
print(‘=‘.center(30, ‘=‘))
# 叫起来
animal1.speak()
animal2.speak()
animal3.speak()
注意:在python中不会强制限制子类必须遵循父类的规范,所以出现了抽象类
注意:在python中不推荐使用抽象类
注意:子类必须按照父类的方法编写规范,缺一不可(只要父类中有几个抽象方法,子类就必须要定义几个)
import abc # 导入abc模块
# 父类
class Animal(metaclass = abc.ABCMeta): # 父类名后继承abc
# 方法 吃
@abc.abstractmethod # 在方法上装饰上此装饰器
def eat(self):
pass
# 方法叫
@abc.abstractmethod
def speak(self):
pass
# 猪类
class Pig(Animal):
def run(self):
print(‘running...‘)
def eat(self):
print(‘bia ji bia ji...‘)
def shuo(self): # 当这里没有按照父类中的speak编写,下面就无法调用
print(‘哼哼哼...‘)
pig_obj = Pig()
pig_obj.run()
pig_obj.shuo() # 这里会报错,所以子类中须按照父类的speak书写
注意:在python中,强烈推荐使用鸭子类型
# 二者看起来都像文件文件,因而就可以当文件一样去用,然而它们并没有直接的关系
class Txt: # Txt类有两个与文件类型同名的方法,即read和write
def read(self):
pass
def write(self):
pass
class Disk: #Disk类也有两个与文件类型同名的方法:read和write
def read(self):
pass
def write(self):
pass
原文:https://www.cnblogs.com/YGZICO/p/11959749.html