首页 > 编程语言 > 详细

python-34-接口类与抽象类

时间:2020-03-15 16:53:57      阅读:70      评论:0      收藏:0      [点我收藏+]

前言

接口类与抽象类是一种设计的模式,一种写代码的规范。

  • 接口类 : python原生不支持
  • 抽象类 : python原生支持的

一、接口类与多继承接口类

1、接口类:统一一个支付的入口

# 1、接口类:统一一个支付的入口
class A_pay:
    def pay(self, money):
        print(A钱包支付:%s元 % money)

class B_pay:
    def pay(self, money):
        print(B钱包支付:%s元 % money)

def pay(pay_ojb, money):
    ‘‘‘pay对象:统一支付入口‘‘‘
    pay_ojb.pay(money)

pay(A_pay(), 1000)
pay(B_pay(), 100)

技术分享图片

2、假如新同学接手怎么写?所以要有接口类规范化:①创建一个规范父类;②元类:metaclass=ABCMeta;③装饰某方法作为约束规范;

如果没有根据规范,在实例化的时候就会报错,就容易知道是哪里的问题了。

# 2、假如新同学接手怎么写?所以要有接口类规范化
# ①创建一个规范父类;②元类:metaclass=ABCMeta;③装饰某方法作为约束规范;
from abc import abstractclassmethod, ABCMeta
class Payment(metaclass=ABCMeta):   # 元类,规范的类。
    @abstractclassmethod              # 引用装饰该方法,作为约束的方法。
    def pay(self, money):pass
class A_pay(Payment):
    def pay(self, money):
        print(A钱包支付:%s元 % money)
class B_pay(Payment):
    def pay(self, money):
        print(B钱包支付:%s元 % money)
class C_pay(Payment):
    def shop_pay(self, money):
        print(C钱包支付:%s元 % money)
def pay(pay_ojb, money):
    ‘‘‘pay对象:统一支付入口‘‘‘
    pay_ojb.pay(money)

ret = C_pay()

技术分享图片

3、接口类多继承:

接口类遵循着接口隔离原则,是面向对象开发的思想的一种规范!

如果规范了某个类的方法,继承后没有该方法会报错,直接会抛出找不到这个规范的方法:

# 3、接口类多继承
# A会唱歌、打篮球
# B会唱歌、开车
# C会唱歌、开车、打篮球
from abc import abstractmethod,ABCMeta
class All_abc(metaclass=ABCMeta):       # 规范
    @abstractmethod
    def sing(self):pass
    @abstractmethod
    def ball(self):pass
    @abstractmethod
    def drive(self):pass

class Sing_ojb(metaclass=ABCMeta):      # 唱歌
    @abstractmethod
    def sing(self):pass
class Ball_ojb(metaclass=ABCMeta):      # 打篮球
    @abstractmethod
    def ball(self):pass
class Drive_ojb(metaclass=ABCMeta):     # 开车
    @abstractmethod
    def drive(self):pass
class A(Sing_ojb, Ball_ojb):            # A会唱歌、打篮球
    def sing(self):return Sing_ojb
    def ball(self):return Ball_ojb
ret = A()
print(ret.ball())

技术分享图片

 二、抽象类

一般情况下抽象类用的是单继承,所以在父类中可以有一些简单的基础实现
多继承的情况如果功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中,抽象类不能被实例化。

1、抽象类

# 3、抽象类
# A会唱歌
# B会唱歌、开车
import abc
class All_ab(metaclass=abc.ABCMeta):  # All_ab:抽象类
    @abc.abstractmethod
    def sing(self):pass               # 定义抽象类规范的方法
    @abc.abstractmethod
    def drive(self):pass              # 定义抽象类规范的方法

class A(All_ab):                       # 子类继承父类,必须要定义父类(抽象类)规范的方法
    def sing(self):return 唱歌
    def drive(self):return 开车

ret = A()
print(ret.drive())

技术分享图片

 总结:这是一种设计模式的规范

  • Python模仿Java,所以抽象类推荐用单继承,接口类推荐用多继承。
  • python中自带多继承 所以我们直接用class来实现了接口类。
  • Python中不管是抽象类还是接口类,都不能被实例化。
  • Python本身不支持原生接口类(是一种概念),抽象类和接口类都是有规范。

欢迎来大家QQ交流群一起学习:482713805 !!!

python-34-接口类与抽象类

原文:https://www.cnblogs.com/gsxl/p/12497708.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!