面向对象-接口类,抽象类,多态,封装
一.接口类和抽象类:制定一个规范
抽象类的本质还是类,指的是一组类的相似性,包括数据属性和函数属性,而接口只强调函数属性的相似性.
抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计.
在python中,并没有接口类这种东西
from abc import ABCMeta,abstractmethod #用abc模块 class Payment(metaclass=ABCMeta): #固定格式 @abstractmethod def pay(self): #制定一个规范 pass class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): print('使用支付宝支付了%s' %self.money) class Jdpay(Payment): def __init__(self, money): self.money = money def pay(self): print('使用京东支付了%s' % self.money) class Wechatpay(Payment): def __init__(self,money): self.money = money def pay(self): print('使用微信支付了%s' % self.money) def pay(obj): #定义一个函数目的是使支付方式一样 obj.pay() a1 = Alipay(100) j1 = Jdpay(200) w1 = Wechatpay(300) pay(a1) #归一化设计 pay(j1) pay(w1)
结果:
使用支付宝支付了100
使用京东支付了200
使用微信支付了300
二.多态: 一个事物有多种形态
由于python是弱类型语言的特性,所有在Python语言中处处都是多态:
鸭子类型:看着像鸭子,其实就是鸭子
解释:比如说str,list,tuple都有index(索引),而且在用法都一样,但它们是不同的类型,这就称为多态
#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用 class TxtFile: def read(self): pass def write(self): pass class DiskFile: def read(self): pass def write(self): pass
三,封装
广义的封装:实例化一个对象,给对象空间封装一些属性
狭义的封装:私有制
私有成员:私有静态字段,私有方法,私有对象属性
在python中用双下划线开头的方式,是将属性隐藏起来
好处:1.将变化隔离.
2.便于使用
3.提高复用性
4,提高安全性
私有静态字段:只能在本类的内部访问,类的外部,派生类不能访问
私有方法:只能在本类的内部访问,类的外部,派生类不能访问
私有对象属性:只能在本类的内部访问,类的外部不能访问