这个 Python 设计模式怎么称呼?

How is this Python design pattern called?

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

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

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

这种设计模式称为构建器,您可以在 here

中了解它

基本上,所有命令(运行 除外)都会更改对象,并且 return 它会自行更改,这允许您在对象继续进行时“构建”该对象。

在我看来是非常有用的东西,在查询构建方面超级好,而且可以简化代码。

考虑一下您要构建的数据库查询,假设我们使用 sql

# lets say we implement a builder called query

class query:
    def __init__():
        ...
    def from(self, db_name):
        self.db_name = db_name
        return self
    ....
 
q = query()
    .from("db_name") # Notice every line change something (like here change query.db_name to "db_name"
    .fields("username")
    .where(id=2)
    .execute() # this line will run the query on the server and return the output

这称为'method chaining'或'function chaining'。您可以将方法调用链接在一起,因为每个方法调用 returns 底层对象本身(在 Python 中表示为 self,在其他语言中表示为 this)。

这是四人组 builder design pattern 中使用的一种技术,您可以在其中构造一个初始对象,然后链接其他 属性 个设置器,例如: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