【发布时间】:2020-09-09 16:08:16
【问题描述】:
我有一个名为Grammar 的类,它包含一组生产规则。在对Grammar 对象进行操作之前,我通常需要为其添加一些额外的规则,这些规则应该在当前任务完成后忘记。所以,我想添加一个方法来返回一个新的Grammar 对象,其中包含所有当前对象的规则以及新的规则。
我可以调用这个方法.add,像这样:
class Grammar:
def add(self, *rules):
'''Returns new Grammar object, with 'rules' added.'''
. . .
但.add 传统上似乎意味着一种通过向集合添加新元素来修改集合的方法。
对于返回新集合的方法,Python 中是否存在命名约定,其中“添加”了新元素,而没有让读者期望它修改了对象?
运算符重载?
我知道.__add__ 方法是由+ 操作符调用的,并且约定确实是不修改对象——像这样:
working_grammar = grammar + [rule1, rule2, rule3]
我正在考虑避免重载运算符,以支持有意义的方法名称。但是,如果重载的运算符生成常规的、预期的、可读的代码,我想了解更多相关信息——可能是库中众所周知的先例,或者是著名的样式指南中的建议。
【问题讨论】:
-
def Get_Copy_With_Added_Rules(self, *rules)?
标签: python collections naming-conventions immutability