python - 这个 Python 设计模式是怎么命名的?
问题描述
在 ffmpeg-python 文档中,他们在示例中使用了以下设计模式:
(
ffmpeg
.input('dummy.mp4')
.filter('fps', fps=25, round='up')
.output('dummy2.mp4')
.run()
)
这种设计模式是怎么命名的,我在哪里可以找到更多关于它的信息,它的优缺点是什么?
解决方案
这称为“方法链接”或“函数链接”。您可以将方法调用链接在一起,因为每个方法调用都返回底层对象本身(用self
Python 或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
推荐阅读
- python - 如何在matplotlib pyplot中显示超过计数顺序?
- html - HTML/CSS,只有当元素内容的高度 > 0 时,元素才具有顶部和底部边距(或填充)
- java - 使用 @ManyToMany 反序列化和持久化
- javascript - 电子邮件地址格式错误
- c# - SQL Server Hierarchyid 和实体框架 HierarchyId 的区别
- java - 如何从第二类的@beforemethod 调用第一类的@Test(POM 数据驱动方法)
- javascript - JavaScript 数组重构
- python - excel保存过程中的字符不正确
- macos - 无法在 macOS 应用程序的 FFMPEG 进程中通过 NSOpenPanel 访问用户选择的文件
- parallel-processing - 循环依赖分析:这个循环可以并行化吗?