8.python之面相对象part.4(接口继承的思想设计,这种东西也叫抽象类)

简介:

接口继承也叫做程序的归一化设计,这种东西也有人叫它抽象类。

那么什么又是抽象类呢?

抽象类这种东西,只能被继承,不可以被实例化。

如果说一个类是从一堆对象中抽取出来的,那么一个抽象类,就是从一堆类中抽取出来的。

简单的说,抽象类与普通类最大的不同之处就是,抽象类中的方法都试抽象的,没有办法实现具体的功能,这种抽象类不能生成对象,只可以被继承,但是,继承了这个抽象类的子类,必须去实现抽象类所抽象出来的方法!这个概念很像接口,所以说,我把它理解为接口式的继承。

关于抽象类的定义概念,可以参考下面这个例子。

在实现抽象类定义之前,python给我提供了一个名为“abc”的模块,这个模块可以用来定义抽象类。

2.7版本:

#!/usr/bin/python2.7

# -*- coding:utf-8 -*-

import abc   #导入abc模块,这个模块可以用来定义抽象类和抽象方法。

class Read_and_write_devices:

    __metaclass__ = abc.ABCMeta    #定义这个类为抽象类

    all_type = "rw_divce"

    @abc.abstractmethod      #定义抽象类中的抽象方法

    def read(self):

        pass

    @abc.abstractmethod        #定义抽象类中的抽象方法

    def write(self):

        pass

class Scsi_harddisk(Read_and_write_devices):

    def read(self):

        print "scsi硬盘读方法"

    def write(self):

        print "scsi硬盘写方法"

class Memory_ram(Read_and_write_devices):

    def write(self):

        print "内存的写方法"


3版本:

import abc

class Read_and_write_devices(metaclass=abc.ABCMeta):

    all_type = "rw_divce"

    @abc.abstractmethod

    def read(self):

        pass

    @abc.abstractmethod

    def write(self):

        pass

class Scsi_harddisk(Read_and_write_devices):

    def read(self):

        print "scsi硬盘读方法"

    def write(self):

        print "scsi硬盘写方法"

class Memory_ram(Read_and_write_devices):

    def write(self):

        print "内存的写方法"


在抽象类的方法上加上了 @abc.abstractmethod这个装饰器后这个抽象类中的方法就回变成抽象方法,如果其他类继承了这个抽象类,就必须去实现这个抽象类中所抽象出来的方法!!如果不满足抽象类中定义的抽象方法,那么这个类将无法创建对象!!

我们来看下上面这个例子,首先定义了一个名为Read_and_write_devices可读写设备的类,想想可读写的设备有哪些?硬盘和内存都是可读可写的设备,现在定义一个内存类用于控制内存的读写,一个硬盘类用来控制硬盘的读写,不管是内存和硬盘都必须具有两个方法,分别是read和write, Scsi_harddisk类和Memory_ram一个用来操作内存,另一个用来操作硬盘,这两个类同事继承Read_and_write_devices这个抽象类,其中Scsi_harddisk类满足了抽象类中抽象出来的read和write方法,而Memory_ram这个类只满足了抽象类中抽象出来的write 方法,接下来用这两个类去创建对象,看看会有什么结果。

disk1 = Scsi_harddisk()

disk1.read()

>>>scsi硬盘读方法

Scsi_harddisk这个类可以创建出对象。(这个类实现了抽象类抽象出的read方法和write方法)。

接下来试试看Memory_ram是否可以生成对象。

mem1 = Memory_ram()

结果输出如下:

Traceback (most recent call last):

  File "/Users/macbook/PycharmProjects/untitled1/8day/test.py", line 26, in <module>

    mem1 = Memory_ram()

TypeError: Can't instantiate abstract class Memory_ram with abstract methods read

Process finished with exit code 1

在 Memory_ram这个类在实例化对象的过程中出了错误,是因为 Memory_ram这个类没实现Read_and_write_devices这个抽象类中抽象出的两个方法,最终导致了Memory_ram这个类没有办法实例化出对象。


为什么要使用接口继承这种特性?

接口(也就是前面说的那个抽象类)提取了一群类共同的函数,然后让继承了接口类(抽象类)的函数(方法)去实现接口类中的函数。

这么做就是为了实现一种名为“归一化”的思想。

所谓的归一化思想,就是只要是通过同一个接口类(抽象类)实现的类,这些类产生的对象,在使用时,方法都一样。

说的再通俗易懂一点,就是我们不再需要关心这个对象是由哪个类产生的,只要知道这些对象都具备哪些功能就可以了。

比如:我们有一个汽车接口,里面定义了汽车所有的功能,然后由本田汽车的类,奥迪汽车的类,大众汽车的类,他们都实现了汽车接口,这样就好办了,大家只需要学会了怎么开汽车,那么无论是本田,还是奥迪,还是大众我们都会开了,开的时候根本无需关心我开的是哪一类车,操作手法(函数调用)都一样。





      本文转自苏浩智 51CTO博客,原文链接http://blog.51cto.com/suhaozhi/1912947:,如需转载请自行联系原作者

相关文章
|
1月前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
2月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
27天前
|
算法 Python
Python多继承时子类如何调用指定父类
通过本文的介绍,希望您能够深入理解Python多继承时子类如何调用指定父类的方法,并在实际项目中灵活运用这些技巧,编写出高效且易维护的代码。
28 11
|
20天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
57 2
|
22天前
|
存储 数据处理 Python
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
29 2
|
27天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
26天前
|
算法 Python
Python多继承时子类如何调用指定父类
通过本文的介绍,希望您能够深入理解Python多继承时子类如何调用指定父类的方法,并在实际项目中灵活运用这些技巧,编写出高效且易维护的代码。
37 1
|
1月前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
48 3
|
1月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
223 5
|
2月前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
下一篇
开通oss服务