我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么从zope.interface了解Python接口

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么从zope.interface了解Python接口

这篇文章主要讲解了“怎么从zope.interface了解Python接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么从zope.interface了解Python接口”吧!

隐式接口不是 Python 之禅

Python 之禅 很宽松,但是有点自相矛盾,以至于你可以用它来例证任何东西。让我们来思考其中最著名的原则之一:“显示胜于隐式”。

传统上,在 Python 中会隐含的一件事是预期的接口。比如函数已经记录了它期望一个“类文件对象”或“序列”。但是什么是类文件对象呢?它支持 .writelines吗?.seek 呢?什么是一个“序列”?是否支持步进切片,例如 a[1:10:2]

最初,Python 的答案是所谓的“鸭子类型”,取自短语“如果它像鸭子一样行走,像鸭子一样嘎嘎叫,那么它可能就是鸭子”。换句话说,“试试看”,这可能是你能得到的最具隐式的表达。

为了使这些内容显式地表达出来,你需要一种方法来表达期望的接口。Zope Web 框架是最早用 Python 编写的大型系统之一,它迫切需要这些东西来使代码明确呈现出来,例如,期望从“类似用户的对象”获得什么。

zope.interface 由 Zope 开发,但作为单独的 Python 包发布。Zope.interface 可以帮助声明存在哪些接口,是由哪些对象提供的,以及如何查询这些信息。

想象编写一个简单的 2D 游戏,它需要各种东西来支持精灵界面(LCTT 译注:“精灵Sprite”是指游戏面板中各个组件)。例如,表示一个边界框,但也要表示对象何时与一个框相交。与一些其他语言不同,在 Python 中,将属性访问作为公共接口一部分是一种常见的做法,而不是实现 getter 和 setter。边界框应该是一个属性,而不是一个方法。

呈现精灵列表的方法可能类似于:

def render_sprites(render_surface, sprites):    """    sprites 应该是符合 Sprite 接口的对象列表:    * 一个名为 "bounding_box" 的属性,包含了边界框    * 一个名为 "intersects" 的方法,它接受一个边界框并返回 True 或 False    """    pass # 一些做实际渲染的代码

该游戏将具有许多处理精灵的函数。在每个函数中,你都必须在随附文档中指定预期。

此外,某些函数可能期望使用更复杂的精灵对象,例如具有 Z 序的对象。我们必须跟踪哪些方法需要 Sprite 对象,哪些方法需要 SpriteWithZ 对象。

如果能够使精灵是显式而直观的,这样方法就可以声明“我需要一个精灵”,并有个严格定义的接口,这不是很好吗?来看看 zope.interface

from zope import interface class ISprite(interface.Interface):     bounding_box = interface.Attribute(        "边界框"    )     def intersects(box):        "它和一个框相交吗?"

乍看起来,这段代码有点奇怪。这些方法不包括 self,而包含 self 是一种常见的做法,并且它有一个属性。这是在 zope.interface 中声明接口的方法。这看起来很奇怪,因为大多数人不习惯严格声明接口。

这样做的原因是接口显示了如何调用方法,而不是如何定义方法。因为接口不是超类,所以它们可以用来声明数据属性。

下面是一个能带有圆形精灵的接口的一个实现:

@implementer(ISprite)@attr.s(auto_attribs=True)class CircleSprite:    x: float    y: float    radius: float     @property    def bounding_box(self):        return (            self.x - self.radius,            self.y - self.radius,            self.x + self.radius,            self.y + self.radius,        )     def intersects(self, box):        # 当且仅当至少一个角在圆内时,方框与圆相交        top_left, bottom_right = box[:2], box[2:]        for choose_x_from (top_left, bottom_right):            for choose_y_from (top_left, bottom_right):                x = choose_x_from[0]                y = choose_y_from[1]                if (((x - self.x) ` 2 + (y - self.y) ` 2) <=                    self.radius ` 2):                     return True        return False

显式声明了实现了该接口的 CircleSprite 类。它甚至能让我们验证该类是否正确实现了接口:

from zope.interface import verify def test_implementation():    sprite = CircleSprite(x=0, y=0, radius=1)    verify.verifyObject(ISprite, sprite)

这可以由 pytest、nose  或其他测试框架运行,它将验证创建的精灵是否符合接口。测试通常是局部的:它不会测试仅在文档中提及的内容,甚至不会测试方法是否可以在没有异常的情况下被调用!但是,它会检查是否存在正确的方法和属性。这是对单元测试套件一个很好的补充,至少可以防止简单的拼写错误通过测试。

感谢各位的阅读,以上就是“怎么从zope.interface了解Python接口”的内容了,经过本文的学习后,相信大家对怎么从zope.interface了解Python接口这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么从zope.interface了解Python接口

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么从zope.interface了解Python接口

这篇文章主要讲解了“怎么从zope.interface了解Python接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么从zope.interface了解Python接口”吧!隐式接口不
2023-06-16

python连接clickhouse端口报错怎么解决

本篇内容介绍了“python连接clickhouse端口报错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python连接click
2023-06-30

SpringBoot怎么调用python接口

本篇内容介绍了“SpringBoot怎么调用python接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言SpringBoot作为后
2023-06-21

python怎么编写api接口

在Python中编写API接口需要使用Web框架来处理HTTP请求和响应。以下是使用Flask框架编写API接口的示例:```pythonfrom flask import Flask, jsonify, requestapp = Flas
2023-08-25

python怎么调用micropython接口

要调用MicroPython接口,需要在Python代码中引入MicroPython的模块。下面是一个简单的示例:```pythonimport machine# 初始化GPIO引脚led = machine.Pin(2, machine.
2023-08-29

python怎么调用chatGPT接口

要调用ChatGPT接口,您可以使用OpenAI的GPT库。首先,确保您已经安装了OpenAI的GPT库,您可以使用以下命令进行安装:```pip install openai```然后,您需要导入所需的库并设置您的OpenAI API密钥
2023-10-10

Python怎么调用GPT3.5接口

这篇“Python怎么调用GPT3.5接口”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么调用GPT3.5接口
2023-07-05

怎么利用python写api接口

这篇文章主要讲解了“怎么利用python写api接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用python写api接口”吧!一、操作步骤导入:import flask,json实
2023-06-30

python中的mock接口怎么用

这篇文章将为大家详细讲解有关python中的mock接口怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是mock?mock在翻译过来有模拟的意思。它允许您用模拟对象替换您的系统的部分,并对它们已
2023-06-29

python程序怎么封装成接口

要将Python程序封装成接口,可以使用以下步骤:1. 创建一个Python模块,其中包含需要封装的功能代码。确保代码可以独立运行,并通过函数或类封装所需的功能。2. 使用第三方库Flask或Django创建一个Web应用程序,用于承载接口
2023-08-24

Python、JAVA、PHP怎么调用api接口

这篇文章主要讲解了“Python、JAVA、PHP怎么调用api接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python、JAVA、PHP怎么调用api接口”吧!返回说明:{"stat
2023-06-04

python怎么读取api接口数据

要读取 API 接口数据,可以使用 Python 的 `requests` 模块来发送 HTTP 请求。以下是一个示例代码,演示如何读取一个 GET 请求的 API 接口数据:```pythonimport requestsurl = 'h
2023-08-25

python怎么获取接口返回值

在Python中,可以使用requests库发送HTTP请求并获取接口返回值。以下是一个简单的示例:import requests# 发送GET请求并获取接口返回值response = requests.get('https:
python怎么获取接口返回值
2024-02-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录