【发布时间】:2015-07-30 00:13:28
【问题描述】:
我正在关注这个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)
【问题讨论】: