python数据接口设计_Python接口与归一化设计

1.什么是接口(interface)

接口(interface)是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合。它好比一个模板,在其中定义了对象必须实现的成员,通过类或结构来实现它。接口不能直接实例化,接口不能包含成员的任何代码,只定义成员本身。接口成员的具体代码由实现接口的类提供。

2.归一化

使用接口的意义在于归一化,什么叫归一化:就是只要是基于同一个接口实现的类,那么所有的这些类产生的对象在使用时,从用法上来说都一样。归一化的好处在于:

归一化让使用者无需关心对象的类是什么,只需要的知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度。

归一化使得上层的外部使用者可以不加区分的处理所有接口兼容的对象集合

1. 就好象linux的泛文件概念一样,所有东西都可以当文件处理,不必关心它是内存、磁盘、网络还是屏幕(当然,对底层设计者,当然也可以区分出“字符设备”和“块设备”,然后做出针对性的设计:细致到什么程度,视需求而定)。

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

3.Python中的interface

首先先看一个Java代码的接口实例:

1 //Java 语言中的接口很好的展现了接口的含义: IAnimal.java

2

3 /*

4

5 * Java的Interface很好的体现了我们前面分析的接口的特征:6

7 * 1)是一组功能的集合,而不是一个功能8

9 * 2)接口的功能用于交互,所有的功能都是public,即别的对象可操作10

11 * 3)接口只定义函数,但不涉及函数实现12

13 * 4)这些功能是相关的,都是动物相关的功能,但光合作用就不适宜放到IAnimal里面了14

15 */

16 /*Animal接口*/

17 packagecom.oo.demo;18

19 public interfaceIAnimal {20 public voideat();21 public voidrun();22 public voidsleep();23 public voidspeak();24 }25 //========== Pig.java

26 packagecom.oo.demo;27

28 public class Pig implements IAnimal{ //如下每个函数都需要详细实现

29 public voideat(){30 System.out.println("Pig like to eat grass");31 }32

33

34 public voidrun(){35 System.out.println("Pig run: front legs, back legs");36 }37

38

39 public voidsleep(){40 System.out.println("Pig sleep 16 hours every day");41 }42

43

44 public voidspeak(){45 System.out.println("Pig can not speak");46 }47 }48

49 //=============== Person.java

50 packagecom.oo.demo;51

52 public class Person2 implementsIAnimal {53 public voideat(){54 System.out.println("Person like to eat meat");55 }56

57 public voidrun(){58

59 System.out.println("Person run: left leg, right leg");60

61 }62

63 public voidsleep(){64 System.out.println("Person sleep 8 hours every dat");65 }66

67

68 public voidspeak(){69 System.out.println("Hellow world, I am a person");70 }71 }

View Code

在python中根本就没有一个叫做interface的关键字,可以使用抽象类似的效果:

3.1 抽象类

与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。

如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。比如:我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子。你永远无法吃到一个叫做水果的东西。

从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽象而来的。

从实现角度来看,抽象类与普通类的不同之处在于:抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。这一点与接口有点类似,但其实是不同的。

3.2 抽象类与接口

抽象类的本质还是类,指的是一组类的属性,包括数据属性(如all_type)和方法属性(如read、write),而接口只强调函数属性的相似性。抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计。

3.3 在Python中实现抽象类

3.3.1 ABC模块

Python有一个模块:ABC,Abstract Base Class(抽象基类),主要定义了基本类和最基本的抽象方法,可以为子类定义共有的API,不需要具体实现。相当于是Java中的接口或者是抽象类。首先看一个ABC的使用案例:

1 import abc #利用abc模块实现抽象类

2

3

4 class AllFile(metaclass=abc.ABCMeta):5 all_type = 'file'

6

7 @abc.abstractmethod #定义抽象方法,无需实现功能

8 defread(self):9 """子类必须定义读功能"""

10 pass

11

12 @abc.abstractmethod #定义抽象方法,无需实现功能

13 defwrite(self):14 """子类必须定义写功能"""

15 pass

16

17

18 classTxt(AllFile):19 pass

20

21

22 t1 = Txt() #报错,子类没有定义抽象方法

运行结果如下:

Traceback (most recent call last):

File"E:/workspace/py3demo/02.py", line 23, in t1= Txt() #报错,子类没有定义抽象方法

TypeError: Can't instantiate abstract class Txt with abstract methods read, write

发现运行出现错误“Can't instantiate abstract class Txt with abstract methods read, write”,意思大致是“不能对抽象类Txt的抽象方法read、write进行实例化”!

重新来设计:

1 import abc #利用abc模块实现抽象类

2

3

4 class AllFile(metaclass=abc.ABCMeta):5 all_type = 'file'

6

7 @abc.abstractmethod #定义抽象方法,无需实现功能

8 defread(self):9 """子类必须定义读功能"""

10 pass

11

12 @abc.abstractmethod #定义抽象方法,无需实现功能

13 defwrite(self):14 """子类必须定义写功能"""

15 pass

16

17

18 class Txt(AllFile): #子类继承抽象类,但是必须定义read和write方法

19 defread(self):20 print('文本数据的读取方法')21

22 defwrite(self):23 print('文本数据的读取方法')24

25

26 class Sata(AllFile): #子类继承抽象类,但是必须定义read和write方法

27 defread(self):28 print('硬盘数据的读取方法')29

30 defwrite(self):31 print('硬盘数据的读取方法')32

33

34 class Process(AllFile): #子类继承抽象类,但是必须定义read和write方法

35 defread(self):36 print('进程数据的读取方法')37

38 defwrite(self):39 print('进程数据的读取方法')40

41

42 wenbenwenjian =Txt()43

44 yingpanwenjian =Sata()45

46 jinchengwenjian =Process()47

48 #这样大家都是被归一化了,也就是一切皆文件的思想

49 wenbenwenjian.read()50 yingpanwenjian.write()51 jinchengwenjian.read()52

53 print(wenbenwenjian.all_type)54 print(yingpanwenjian.all_type)55 print(jinchengwenjian.all_type)

运行结果如下:

文本数据的读取方法

硬盘数据的读取方法

进程数据的读取方法

file

file

file

3.4.2 抛出异常

可以在抽象类的抽象方法中抛出异常,若派生类中重新实现了该抽象方法,则将会覆盖掉派生类中的派生方法,否则将会抛出异常:

1 classAllFile(object):2 all_type = 'file'

3

4 defread(self):5 """子类必须定义读功能"""

6 raise NotImplementedError('未实现该方法!')7

8 defwrite(self):9 """子类必须定义写功能"""

10 raise NotImplementedError('未实现该方法!')11

12

13 classTxt(AllFile):14 pass

15

16

17 t1 = Txt() #报错,子类没有定义抽象方法

18 t1.write()

运行程序,结果如下:

raise NotImplementedError('未实现该方法!')

NotImplementedError: 未实现该方法!

可以看出,继承于抽象类AllFile的txt在未实现write方法时,抛出了NotImplementedError异常,同样达到了限制的功能。

本文参考:

lynnyq:https://blog.csdn.net/lynnyq/article/details/79560867

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 二维码数据集是指一组包含了二维码图像和对应标签的数据集。在Python中,我们可以使用各种方法和库来创建、读取和操作二维码数据集。 首先,我们可以使用Python中的qrcode库来创建二维码图像。该库提供了简单易用的方法,如`qrcode.make(data)`,其中`data`是二维码所包含的数据,可以是文本、链接等。我们可以通过遍历标签,将对应的数据生成二维码图像,然后保存到指定的文件夹中。 接下来,为了方便读取和处理二维码数据集,我们可以使用Python中的PIL库来加载和处理图像。通过`Image.open(filename)`方法可以加载图像文件,然后可以使用`image.convert('L')`将彩色图像转换为灰度图像,这样有助于提高图像的处理速度和准确性。 对于数据集的操作,我们可以使用Python中的Pandas库来进行数据处理和分析。可以将二维码图像的像素值转换为特征向量,并将对应的标签存储为数组。然后,可以利用Pandas提供的功能,例如数据过滤、排序、分组等来处理和分析数据集。 另外,在使用二维码数据集进行机器学习任务时,我们可以使用Python中的Scikit-learn库来构建和训练模型。首先,可以将数据集分为训练集和测试集,然后选择合适的分类算法来训练模型。接着,可以使用测试集来评估模型的性能,并根据评估结果进行调整和优化。 总之,二维码数据集在Python中的应用非常广泛。通过使用适当的库和方法,我们可以轻松地创建、读取和处理二维码数据集,并应用于机器学习和其他领域的任务中。 ### 回答2: 二维码数据Python是指在Python编程语言中使用的包含多个二维码的数据集。二维码是一种能够存储大量信息的方形图像,可通过扫描设备进行解码。在处理二维码数据集时,Python提供了一些工具和库,可以对二维码进行生成、解码和分析。 首先,我们可以使用Python中的qrcode库来生成二维码。该库允许我们将字符串、URL或其他数据转换为二维码图像。通过设置不同的参数,如背景颜色、前景颜色和像素大小,我们可以自定义生成的二维码。 其次,Python中的zxing库可以用于解码二维码图像。该库提供了接口,可以读取二维码图像,并将其转换为字符串或其他可供进一步处理的数据类型。我们可以使用该库来解码从摄像头、图像文件或屏幕截图中获取的二维码。 此外,Python中还有其他一些与二维码相关的库,如pyzbar和opencv-python。这些库提供了更丰富的功能,例如识别和解析多个二维码、定位二维码位置以及处理二维码图像的旋转和模糊等问题。 对于二维码数据集的分析,我们可以使用Python数据分析和可视化库,如Pandas和Matplotlib。这些库可以帮助我们对二维码数据集进行统计分析、可视化和挖掘。通过这些分析,我们可以了解二维码的使用情况、扫描次数、使用时间分布等信息,从而优化二维码的设计和使用策略。 总之,二维码数据Python提供了丰富的工具和库,可以方便地生成、解码和分析二维码。这些工具可以帮助我们更好地理解二维码的特性和应用,为二维码的设计和优化提供支持。 ### 回答3: 二维码数据集是指用于训练和测试二维码识别算法的数据集。Python是一种广泛应用于数据处理和机器学习领域的编程语言。在Python中,可以使用各种库和工具来处理和分析二维码数据集。 首先,我们需要下载或生成包含二维码图像和对应标签的数据集。可以使用Python中的qrcode库生成一批二维码图像,并将它们保存到文件中。同时,可以使用一个列表来存储每个二维码图像的标签,例如二维码所代表的信息或相应的类别。 接下来,我们可以使用Python中的图像处理库(如PIL或OpenCV)加载二维码图像,并将其转换为适合机器学习算法读取的数据格式。一种常见的处理方法是将图像转换为灰度图像,然后将像素值归一化到0到1之间。 在建立二维码数据集时,可以使用训练集和测试集的划分,以便在训练模型和评估其性能时使用不同的数据。可以使用Python中的Scikit-learn库中的train_test_split函数来随机划分数据集。 在对数据集进行训练和测试之前,还可以使用Python中的一些数据预处理技术来增强数据,例如旋转、缩放、平移或添加噪声等。这些技术可以通过使用图像处理库或相关的深度学习框架(如TensorFlow或PyTorch)来实现。 最后,我们可以使用Python中的各种机器学习算法(如支持向量机、决策树、深度学习等)对二维码数据集进行训练和测试。可以使用已有的机器学习库(如Scikit-learn、TensorFlow或PyTorch)来构建和训练模型,并使用测试数据集评估模型的性能。 综上所述,通过使用Python和相关的库和工具,我们可以很方便地处理和分析二维码数据集,并构建和训练二维码识别模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值