这个Python设计模式是如何调用的



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

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

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

这个名为builder的设计模式,你可以在这里阅读

基本上,所有的命令(除了run(都会更改对象,并将其自身返回,这允许您";构建";

在我看来是非常有用的东西,在查询中构建是非常好的,并且可以简化一个代码。

考虑一下您想要构建的数据库查询,假设我们使用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

这被称为"方法链接"或"函数链接"。您可以将方法调用链接在一起,因为每个方法调用都返回底层对象本身(在Python中用self表示,在其他语言中用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

相关内容

  • 没有找到相关文章

最新更新