问题标签 [zope.interface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在 zope.interface 中声明 @staticmethod
我尝试使用@staticmethod 和@classmethod 创建接口。声明类方法很简单。但我找不到声明静态方法的正确方法。
考虑类接口及其实现:
输出:
我应该如何在这个接口中正确声明静态方法?
python - 使用 cx_Freeze 时没有名为 Zope.interface 的模块错误
我使用twisted 和其他几个模块创建了一个modbus 服务器脚本。在 Anaconda spyder 工具中,脚本工作正常,但是当我使用 cx_freeze 工具创建 exe 文件时,出现以下错误。
请帮我找到解决方案。
注意:我已经从 anaconda 命令提示符使用 pip install 安装了 twisted 和其他模块
validation - Plone - 如何让验证器根据特定内容类型的行为验证字段?
我正在使用 Plone 4.3,并且我有一个 form.SchemaForm plone.directives 有一个接口,该接口有一个来自 IEventBasic 的起始字段和一个验证器:
在我的类型文件(profiles/default/types 下的 my.object.myobject.xml)中,我将行为放在了行为部分中。
问题是它验证任何 Event 对象或任何实现 IEventBasic 接口/模式的对象中的 end 字段。
我想也许是因为 Plone 文档说 WidgetValueDiscriminators 的参数“视图”和“上下文”接受一个接口,那么我可以这样做:
或者
不幸的是,这些都没有触发。我想我误解了上下文和视图参数的实际作用。我怎样才能使验证器专门用于处理 MyObject?
现在我正在做:
更新 2:我之前删除了我的评论,因为它是针对一个不相关的问题。我改变了检查类型的方式。
transactions - ImportError:没有名为“zope.interface”的模块
在 Mac 上:
无法弄清楚它为什么存在,但没有导入模块。
python - 尝试注册 zope.interface 的实现者时出错
我有下一节课:
当我将它添加到 zope 注册表时:
我有:TypeError: The adapter factory doesn't have a __component_adapts__ attribute and no required specifications were specified
当我在那里添加适配器(IOther)时,注册按预期工作,但没有。为什么会发生?
python - “Importerror: no module named zope.interface”,但我已经安装在我的 Centos 7 上
为什么我不能运行这段代码?我已经有 zope.interface 我尝试更新路径但仍然无法正常工作,我不知道为什么。见上图:
python - 验证未知模块/对象是否必须使用特定接口(python)
例如,我想在运行时检查给定对象是否具有方法foo()
和bar()
.
我的研究系统是用 python 3.6 构建的,它是高度参数化的,可以/应该接受任何类型的对象作为其内置模块的替代品。这个功能非常有用,因为使用这个系统的许多不同的学生可以很容易地研究不同的行为,而无需更改我系统的源代码。
问题是,如果他们错误地构建了模块,他们可能只有在整个实验结束后(可能是几个小时)才会发现这一点。
我正在寻找一种方法来在运行时的早期阶段检查他们的输入模块是否与特定接口匹配。甚至在实例化之前验证它会更好(当输入只是类型,而不是实例时)。例如some_interface.verify(MyClass)
.
解决方案
我在互联网上看到了很多解决方案(例如this),但没有一个适合:
最常见的解决方案 (
try/catch
) 只会在运行时失败,并且不适用于多守护程序系统,因为只有一个守护程序失败时很难关闭。检查
isinstance()
不会验证任何内容。情况可能更糟,因为开发人员可能忘记实现一个函数并使用基类实现,这可能不适合其当前实现。使用ABC(抽象基类)需要开发者继承基类。如果她/他没有这样做,实例化类时不会发出警告或错误。另一方面,如果开发人员确实实现了接口但没有继承自
base
,那么issubclass()
将返回 False。使用zope 接口是我的首选,但它有一些缺点:
- 它要求开发人员明确提及它正在实现接口。未能指定这将导致错误,尽管实际实现是正确的。
- 它无法在实例化之前验证模块。该
implementedBy()
方法只会检查声明的模块是否正在实现接口,但要实际验证它,您应该调用verifyObject()
实际实例。 - 它不支持自 python 3.5 以来添加的新类型功能
编辑:显然,zope 还支持通过调用隐式实现,verifyObject(YourInterface, obj, tentative=True)
这不会强制开发人员将类显式定义为接口的实现者。
python - P2Pool:扭曲中止连接错误
每次尝试运行 python run_p2pool.py 时,我都会遇到以前从未遇到过的错误,我什至尝试执行 -n 并输入参数,但这并不能解决问题(正如互联网所建议的那样)。我也已经有了配置,甚至尝试重新安装 python twisted 无济于事。我尝试运行的代码没有错误,我还没有弄清楚如何解决这个问题。
我以前从来没有遇到过这个问题并且之前能够运行相同的程序,但只是封装,这里是 deferal.py 文件
python-3.x - 接口继承声明
我正在尝试使用由 Github 开发人员开发的旧代码。该代码使用 zope.interface 库中的实现来声明类元素的接口。由于库中的实现在 Python 3.6 中不再起作用,我遇到了这个错误:
一些网站已经解释了如何用 @implementer 替换实现以在 Python 3.6 上工作,例如这里。但是我还没有找到任何例子来解释当 zope.interface.implements 被用作继承时如何更新代码。代码如下所示:
我想更新此代码以在 Python 3.6 上工作。我试过这个
但它不起作用。请帮我弄清楚如何使上述代码在 Python 3.6 中运行。