多态就是不同子类对象调用父类的方法产生不同的结果。
练习:使用不同的支付工具给商店支付钱
import abc
class Pay(metaclass=abc.ABCMeta):
# 创建抽象类(Pay)
@abc.abstractmethod # 创建类(Pay)的抽象属性
def pay(self,money): pass
class Alipay(Pay): # 创建抽象类(Pay)的子类(Alipay)
def pay(self,money): # 根据父类中创建的抽象方法在
# 子类中创建对应的方法并进行具体描述来实现这一个方法
print('支付宝到账{}元'.format(money))
class ApplePay(Pay): # 创建抽象类(Pay)的子类(ApplePay)
def pay(self,money): # 根据父类中创建的抽象方法在
# 子类中创建对应的方法并进行具体描述来实现这一个方法
print('苹果支付{}元'.format(money))
class Person(object): # 创建类(Person)
def consumption(self,pay,money):
pay.pay(money)
person=Person() # 创建类(Person)的实例对象(person)
# 支付宝支付
alipay=Alipay() # 创建父类(Pay)的子类(Alipay)的实例对象
person.consumption(alipay,20)
# 实例对象(person)执行类方法consumption方法中执行实例
# 对象(alipay)执行类(Alipay)方法pay,最终打印最终结果
# 苹果支付
apple_pay=ApplePay() # 创建父类(Pay)的子类(ApplePay)的实例对象
person.consumption(apple_pay,200)
# 实例对象(person)执行类方法consumption方法中执行实例
# 对象(apple_pay)执行类(ApplePay)方法pay,最终打印最终结果
运行结果:
支付宝到账20元
苹果支付200元
文件系统:
from abc import ABCMeta, abstractmethod
class File(metaclass=ABCMeta):
@abstractmethod
def read(self): pass
@abstractmethod
def write(self): pass
class Word(File):
def read(self):
print('很优雅的读...')
def write(self):
print('很优雅的写...')
class Txt(File):
def read(self):
print('很粗暴的读...')
def write(self):
print('很粗暴的写....')