Python方法/函数链

时间:2018-07-04 14:45:39

标签: python chaining

在python中,是否可以将类方法和函数链接在一起?例如,如果我想实例化一个类对象并在其上调用一个影响实例变量状态的方法,我可以这样做吗?这是一个示例:

class Test(object):
    def __init__(self):
        self.x = 'Hello'

    @classmethod
    def make_upper(y):
        y.x = y.x.upper()

我想做的是这样

h = Test().make_upper()

我想实例化一个类对象并在一行代码中影响变量的状态,但是我也希望能够将可能影响状态或对对象执行其他操作的多个函数链接在一起。像在jQuery中一样,这在python中可能吗?

2 个答案:

答案 0 :(得分:2)

是的,可以。只需从您感兴趣的实例方法中返回self

class Test(object):
    def __init__(self):
        self.x = 'Hello'

    def make_upper(self):
        self.x = self.x.upper()
        return self
    def make_lower(self):
        self.x = self.x.lower()
        return self

h = Test().make_upper()
print(h.x)

输出:

HELLO

答案 1 :(得分:1)

是,不是。链接当然可以,但是hmake_upper()的返回值,而不是Test()返回的对象。您需要将其写为两行。

h = Test()
h.make_upper()

但是PEP-572最近被接受包含在Python 3.8中,这意味着有一天您可以编写

(h := Test()).make_upper()

Test()的返回值分配给当前范围中的h,并将其用作:=表达式的值,然后调用其{ {1}}方法。不过,我不确定在这种情况下是否建议使用make_upper;当前所需的语法更具可读性。