首页 > 解决方案 > 这个 Python 设计模式是怎么命名的?

问题描述

在 ffmpeg-python 文档中,他们在示例中使用了以下设计模式:

(
    ffmpeg
    .input('dummy.mp4')
    .filter('fps', fps=25, round='up')
    .output('dummy2.mp4')
    .run()
)

这种设计模式是怎么命名的,我在哪里可以找到更多关于它的信息,它的优缺点是什么?

标签: pythonpython-3.xdesign-patternspython-objectobject-notation

解决方案


这称为“方法链接”或“函数链接”。您可以将方法调用链接在一起,因为每个方法调用都返回底层对象本身(用selfPython 或this其他语言表示)。

这是四人组构建器设计模式中使用的一种技术,您可以在其中构造一个初始对象,然后链接其他属性设置器,例如:car().withColor('red').withDoors(2).withSunroof().

这是一个例子:

class Arithmetic:
    def __init__(self):
        self.value = 0

    def total(self, *args):
        self.value = sum(args)
        return self

    def double(self):
        self.value *= 2
        return self

    def add(self, x):
        self.value += x
        return self

    def subtract(self, x):
        self.value -= x
        return self

    def __str__(self):
        return f"{self.value}"


a = Arithmetic().total(1, 2, 3)
print(a)  # 6

a = Arithmetic().total(1, 2, 3).double()
print(a)  # 12

a = Arithmetic().total(1, 2, 3).double().subtract(3)
print(a)  # 9

推荐阅读