- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在关注这个explanation ,我不太明白Python解释器是如何得出以下结果的。在第一个示例中,Python 是否发现 @implementer(IAmericanSocket)
不是由 UKSocket
实现的,然后它决定将其设为 AdaptToAmericanSocket
,因为是唯一带有一个参数的 IAmericanSocket
实现吗?如果有另一个类实例使用一个参数实现 IAmericanSocket 该怎么办?在第二个示例中,为什么 IAmericanSocket
没有覆盖 AmericanSocket
的电压方法?
>>> IAmericanSocket(uk)
<__main__.AdaptToAmericanSocket instance at 0x1a5120>
>>> IAmericanSocket(am)
<__main__.AmericanSocket instance at 0x36bff0>
使用以下代码:
from zope.interface import Interface, implementer
from twisted.python import components
class IAmericanSocket(Interface):
def voltage():
"""
Return the voltage produced by this socket object, as an integer.
"""
@implementer(IAmericanSocket)
class AmericanSocket:
def voltage(self):
return 120
class UKSocket:
def voltage(self):
return 240
@implementer(IAmericanSocket)
class AdaptToAmericanSocket:
def __init__(self, original):
self.original = original
def voltage(self):
return self.original.voltage() / 2
components.registerAdapter(
AdaptToAmericanSocket,
UKSocket,
IAmericanSocket)
最佳答案
您可以在此处查看 zope.interface 的完整文档:http://docs.zope.org/zope.interface/ - 它可能提供比 Twisted 的快速教程更全面的介绍。
为了回答您的具体问题,最后的 registerAdapter
调用会更改调用 IAmericanSocket
的行为。
当您调用接口(interface)
时,它首先检查其参数是否提供本身。由于类 AmericanSocket
实现 IAmericanSocket
,AmericanSocket
的实例提供 IAmericanSocket
。这意味着当您使用 AmericanSocket
实例的参数调用 IAmercianSocket
时,您只需取回该实例。
但是,当参数尚未提供接口(interface)时,接口(interface)会搜索适配器,适配器可以将参数提供的内容转换为目标接口(interface)。 (“搜索适配器”是一个巨大的过度简化,但 Twisted 的 registerAdapter
的存在是专门为了允许这种类型的简化而存在的。)
因此,当使用 UKSocket
实例调用 IAmericanSocket
时,它会从 UKSocket
实例中查找已注册的适配器。适配器本身是一个 1 参数可调用函数,它采用“from”(UKSocket
)改编的类型的参数,并返回“to”改编的类型的值(IAmericanSocket 的提供者)
)。 AdaptToAmericanSocket
是一个类,但类本身是可调用的,并且由于其构造函数采用 UKSocket
,因此它符合 thing-that-takes-1-argument-of- 的约定类型-UKSocket
-and-returns-an-IAmericanSocket
。
另一个类的存在不会产生影响,除非它被注册为适配器。如果您注册两个可能都适合的适配器,它们的交互会很复杂,但由于它们都完成这项工作,理论上您不应该关心使用哪一个。
关于python - Python 界面如何工作(在 Twisted 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713257/
我正在尝试发送 RFC5424 中定义的结构化数据从 Twisted 到系统日志。我在 Ubuntu 上,系统日志实现是 rsyslog。 我正在使用“twistd --syslog”运行扭曲的应用程
摘要:无法自动向 Twisted 的检修孔发出命令。寻求解决方案/建议。 Twisted 有一个很棒的功能,称为 manhole。它允许用户通过 ssh 连接到当前正在运行的 Twisted 服务器并
我正在尝试发送 RFC5424 中定义的结构化数据从 Twisted 到系统日志。我在 Ubuntu 上,系统日志实现是 rsyslog。 我正在使用“twistd --syslog”运行扭曲的应用程
我正在尝试使用扭曲的 spawnProcess 启动一个进程,并使用 psutil 每 5 秒记录一次资源使用情况。首先,我尝试使用以下代码获取生成的进程的可执行文件名称: #!/usr/bin/py
Azure 网站能否托管 Twisted 应用程序?例如像这样的东西: from twisted.internet import reactor from twisted.web import ser
有没有办法限制 Twisted http 客户端的下载速率?如果没有,在 Twisted 中实现此类客户端的最简单方法是什么? 最佳答案 Twisted 中的流控制最常使用 IProducer.pau
我的基于 Twisted 的客户端循环发送 UDP 数据包。因此,我正在使用 DatagramProtocol 类。这是来源: #!/usr/bin/python # -*- coding: utf-
raven 有很多集成,包括 python 日志记录。一方面,twisted 不使用python 的日志记录。而另一方面,在twisted 中,raven 并没有直接的整合。 那么在基于扭曲的设置中使
有人告诉我,Twisted基于库Ampoule是创建在不同计算机上执行的进程池的好方法。然而,没有相关文档,Ampoule 的示例也没有说明这一点。 我对类似于 stdlib multiprocess
Twisted 最近推出了一个新的日志记录模块:twisted.logger。我已经通读了文档 [1],但我一直无法找到设置实际日志级别的位置。关于日志观察者[2] 的部分建议,如果您显式配置自己的
我想问一个关于如何关闭扭曲连接的问题 RPC . 我知道有人问过类似的问题,但似乎没有回答我的问题。 我正在做一些基本的连接,如下图所示: cfactory = pb.PBClientFactory(
我正在使用 Twisted 编写代码,但在为我的扭曲互联网延迟变量想出一个合理的变量名时遇到了麻烦。这是我的候选人: d :太通用,太短,违反了 pylint 规则 C0103。 def :与内置函数
我正在为 Web 服务器的静态部分使用 Twisted Web static.File 资源。 对于开发,我希望能够添加新文件或修改当前静态文件,而无需重新启动 Twisted 网络服务器。 我在 g
我想使用 Twisted 重建现有应用程序的通信部分。这个应用程序确实从客户端向服务器发送数据,只是这样,服务器不发送任何东西。 我如何使用 Twisted 的事件驱动概念来实现这一目标?我目前使用
我开始考虑通过扩展当前的 Twisted FTP 来实现显式 FTP。 大部分代码都很简单,实现 AUTH、PBSZ、PROT 很容易,我得到了一个有效的安全控制 channel 。 我的问题是数据通
我想实现 WebRTC 对等连接。我不知道如何设置 ICE 服务器或应该使用什么工具。任何人都可以给我建议吗?非常感谢。 最佳答案 实际上你不需要编写自己的 STUN/TURN 服务器 有很多现成的解
正如标题所示,ProcessProtocol 类上的这两个函数有什么区别?关于什么时候应该使用一种而不是另一种的文档有点稀疏? 我最好寻找一些可以证明这一点的用例示例。 最佳答案 我猜文档在这一点上有
使用下面的代码,我似乎可以相当轻松地使用 multiprocessing.reduction 在子进程中重建套接字.. import socket,os import multiprocessing
我正在尝试在 python 上使用 twisted 编写服务器。这是我文件的头部: from twisted.internet.protocol import Factory, Protocol fr
我使用 Twisted 制作了一个简单的 http 服务器,它发送 Content-Type: multipart/x-mixed-replace header 。我正在使用它来测试我想设置为接受长期
我是一名优秀的程序员,十分优秀!