Python接口如何工作(在Twisted中)?

2024-06-02 13:01:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循这个explanation,我不太明白Python解释器是如何到达下面的。在第一个例子中,Python是否看到@implementer(IAmericanSocket)不是由UKSocket实现的,那么它决定将其设为AdaptToAmericanSocket,因为这是{}的唯一实现,只有一个参数?如果有另一个类实例用一个参数实现IAmericanSocket,会怎么样?在第二个例子中,为什么IAmericanSocket没有覆盖AmericanSocket的电压方法?在

>>> IAmericanSocket(uk)
<__main__.AdaptToAmericanSocket instance at 0x1a5120>
>>> IAmericanSocket(am)
<__main__.AmericanSocket instance at 0x36bff0>

代码如下:

^{pr2}$

Tags: 实例方法instance参数main解释器at例子
1条回答
网友
1楼 · 发布于 2024-06-02 13:01:40

您可以查看的完整文档zope.接口这里:http://docs.zope.org/zope.interface/-它可能提供比Twisted的快速教程更全面的介绍。在

为了回答您的特定问题,最后的registerAdapter调用改变了调用{}的行为。在

当您调用Interface时,它首先检查它的参数是否提供本身。由于类AmericanSocket实现了IAmericanSocket,因此AmericanSocket的实例提供了IAmericanSocket。这意味着,当您使用AmericanSocket实例的参数调用IAmercianSocket时,您只需将实例取回。在

但是,当参数尚未提供接口时,接口会搜索适配器,以将参数提供给目标接口的内容转换为适配器。(“搜索适配器”是一个巨大的过度简化,但是Twisted的registerAdapter是专门为这种简化而存在的。)

因此,当使用UKSocket的实例调用IAmericanSocket时,它会从UKSocket的实例中找到已注册的适配器。适配器本身是一个1参数的可调用函数,它接受“from”(UKSocket)类型的参数,并返回“to”类型的值(提供程序IAmericanSocket)。AdaptToAmericanSocket是一个类,但类本身是可调用的,由于其构造函数采用UKSocket,因此它符合thing-that-takes-1-argument-of-type-UKSocket-的约定,并返回一个-IAmericanSocket。在

另一个类的存在不会产生任何影响,除非它被注册为适配器。如果您注册两个可能都适合的适配器,那么它们的交互非常复杂,但是由于它们都能完成任务,理论上您不应该关心使用哪一个。在

相关问题 更多 >