python-day17-面向对象-接口类,抽象类,多态,封装

一.接口类和抽象类:制定一个规范

  抽象类的本质还是类,指的是一组类的相似性,包括数据属性和函数属性,而接口只强调函数属性的相似性.

  抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计.

  在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,提高安全性

私有静态字段:只能在本类的内部访问,类的外部,派生类不能访问

私有方法:只能在本类的内部访问,类的外部,派生类不能访问

私有对象属性:只能在本类的内部访问,类的外部不能访问

猜你喜欢

转载自www.cnblogs.com/ITdong-1/p/9373725.html