Python 非交换的命名约定';添加';收藏

Python 非交换的命名约定';添加';收藏,python,collections,naming-conventions,immutability,Python,Collections,Naming Conventions,Immutability,我有一个名为Grammar的类,它包含一组产生式规则。在使用语法对象进行操作之前,我通常需要向其添加一些额外的规则,在当前任务完成后应该忘记这些规则。因此,我想添加一个方法,该方法返回一个新的语法对象,包含当前对象的所有规则以及新规则 我可以调用此方法.add,如下所示: class Grammar: def add(self, *rules): '''Returns new Grammar object, with 'rules' added.'''

我有一个名为
Grammar
的类,它包含一组产生式规则。在使用
语法
对象进行操作之前,我通常需要向其添加一些额外的规则,在当前任务完成后应该忘记这些规则。因此,我想添加一个方法,该方法返回一个新的
语法
对象,包含当前对象的所有规则以及新规则

我可以调用此方法
.add
,如下所示:

class Grammar:

    def add(self, *rules):
        '''Returns new Grammar object, with 'rules' added.'''
        . . .
working_grammar = grammar + [rule1, rule2, rule3]
但是
.add
传统上似乎意味着通过向集合添加新元素来修改集合的方法

Python中是否有一个方法的命名约定,该方法返回一个新集合,并“添加”新元素,而不会让读者期望它修改对象


运算符重载?

我知道
\uuuu add\uuuu
方法是由
+
操作符调用的,这里的约定确实是对象不会像这样修改:

class Grammar:

    def add(self, *rules):
        '''Returns new Grammar object, with 'rules' added.'''
        . . .
working_grammar = grammar + [rule1, rule2, rule3]

我正在考虑避免重载运算符,而使用有意义的方法名。但是,如果重载运算符生成常规的、预期的、可读的代码,我想知道更多关于这一点的信息,可能是库中的一个众所周知的先例,或者是一个众所周知的样式指南中的建议。

我通常用输出命名函数。另外,使用动词+宾语。一些建议:

  • 添加规则(或添加规则())
  • 增加
  • 添加了规则
  • 插入
For'返回一个新集合,并“添加”新元素'。通常的收藏是什么?列表、元组、集合

  • 将添加到规则列表中
  • 将添加到规则集

您还可以遵循

concat
不仅来自Python,而且还来自CC++;它的意思是“添加项,然后返回对集合的引用”,如字符串连接或数组连接

类语法:
def concat(自我,规则):
''返回新的语法对象,并添加了'rules'。''
工作语法=grammar.concat([rule1,rule2,rule3])

您甚至可以为规则数组和其他
语法
对象扩展
concat
方法

类语法:
def concat(自,*语法化):
grammarC=grammarA.concat(grammarB,[规则,规则])

def Get\u Copy\u添加规则(self,*规则)