与Python的流畅接口

2024-10-03 17:26:18 发布

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

我有一个Python函数“send_message”,它有三个参数:

send_message("i like windmills", to="INBOX", from="OUTBOX")

我正在考虑在上面放一个流畅的界面。理想情况下,我想写以下内容:

^{pr2}$

或者

send_message("i like windmills").from("OUTBOX").to("INBOX")

更新:to()信息是必需的,但是from()不是必需的(与真实字母一样)。所以这个电话也是有效的:

send_message("i like windmills").to("INBOX")

有什么办法完成这个或类似的事情吗?在

我理解对象返回“自我”的一般方法,但在我的理解中,这将导致如下情况:

message = Message("i like windmills")
message.to("INBOX").from("OUTBOX").send()

但是这一个并不像前面的例子那么好,我实际上更喜欢带有命名参数的原始版本。在

感谢任何帮助。在


Tags: to函数fromsend信息message参数界面
1条回答
网友
1楼 · 发布于 2024-10-03 17:26:18

我不确定是否有更好的方法,因为这是我的第一次尝试。祝你好运!在

DEFAULT_SENDER = 'my_address'
#Because the sender object is optional I assume you have a default sender

class Send_message(object):
    def __init__(self, message):
        self.message = message
        self.sender = None
        self.receiver = None
        self.method = None

    def to(self, receiver):
        self.receiver = receiver
        self.method = self.send()
        return self

    def _from(self, sender):
        self.sender = sender
        self.method = self.send()
        return self

    def __call__(self):
        if self.method:
            return self.method()
        return None

    def send(self):
        if self.receiver:
            if not self.sender:
                self.sender = DEFAULT_SENDER

            return lambda:actual_message_code(self.message, self.sender, self.receiver)


def actual_message_code(message, sender, receiver):
    print "Sent '{}' from: {} to {}.".format(message, sender, receiver)



Send_message("Hello")._from('TheLazyScripter').to('samba2')()
Send_message("Hello").to('samba2')._from('TheLazyScripter')()
Send_message("Hello").to('samba2')()

#Only change in actual calling is the trailing ()

通过实现__call__方法,我们可以判断我们何时处于调用链的末尾。这当然会添加尾随的()调用。并要求您更改指向实际消息传递方法和默认sender变量的指针,但我觉得这是在不知道链何时结束的情况下实现目标的最简单方法。在

相关问题 更多 >