当前位置: 首页 > 面试题库 >

python中的方法链接

须巴英
2023-03-14
问题内容

(不要与itertools.chain混淆)

我正在阅读以下内容:http :
//en.wikipedia.org/wiki/Method_chaining

我的问题是: 在python中实现方法链接的最佳方法什么?

这是我的尝试:

class chain():
    def __init__(self, my_object):
        self.o = my_object

    def __getattr__(self, attr):
        x = getattr(self.o, attr)
        if hasattr(x, '__call__'):
            method = x
            return lambda *args: self if method(*args) is None else method(*args)
        else:
            prop = x
            return prop

list_ = chain([1, 2, 3, 0])
print list_.extend([9, 5]).sort().reverse()

"""
C:\Python27\python.exe C:/Users/Robert/PycharmProjects/contests/sof.py
[9, 5, 3, 2, 1, 0]
"""

一个问题是调用是否method(*args)修改self.o但不返回None。(那么我应该退货self还是退货method(*args))。

有没有人有更好的实现链接的方法?可能有很多方法可以做到这一点。

我是否应该假设某个方法总是返回,None所以我可能总是返回self.o


问题答案:

我一直在寻找类似的链接Class功能,但找不到很好的答案,所以这是我做的,并认为这是一种非常简单的链接方式:只需返回self对象即可。

所以这是我的设置:

Class Car():
    def __init__(self, name=None):
        self.name = name
        self.mode = 'init'

    def set_name(self, name):
        self.name = name
        return self

    def drive(self):
        self.mode = 'drive'
        return self

现在,我可以通过调用以下方式来命名汽车并将其置于行驶状态:

my_car = Car()
my_car.set_name('Porche').drive()

警告 :这仅适用于不打算返回任何数据的类函数。

希望这可以帮助!



 类似资料:
  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加

  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加

  • 本文向大家介绍PHP中的方法链接,包括了PHP中的方法链接的使用技巧和注意事项,需要的朋友参考一下 示例 方法链接是Martin Fowler的《领域特定语言》一书中介绍的一种技术。方法链接总结为 使修饰符方法返回宿主对象,以便可以在单个表达式中调用多个修饰符。 看这段非链接/常规代码(从上述书籍中移植到PHP) 通过方法链接,您可以以更紧凑的方式编写上述语句: 为此,您所需要做的就是使用要链接r

  • 本文向大家介绍python链接Oracle数据库的方法,包括了python链接Oracle数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python链接Oracle数据库的方法。分享给大家供大家参考。具体如下: 这里使用python链接Oracle数据库需要引用cx_Oracle库 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍python 链接和操作 memcache方法,包括了python 链接和操作 memcache方法的使用技巧和注意事项,需要的朋友参考一下 1,打开memcached服务 2,使用python-memcached模块,进行简单的链接和存取数据 3,其它方法请参考: 以上这篇python 链接和操作 memcache方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家

  • 问题内容: 这个问题已经在这里有了答案 : 如何在Python中断开一系列链接方法? (8个答案) 7年前关闭。 通过阅读PEP-8,我知道您应该将右括号与函数调用中的最后一个参数放在同一行: 可能最好完全避免使用长表达式。但是,如果不希望这样做, 您将如何进行多个链接方法调用? 结束语应该换行吗? 那么无参数方法呢? 如何在不参考中间返回值的情况下将它们写在多行上? 更新 :存在一个重复的问题,