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]
我正在考虑避免重载运算符,而使用有意义的方法名。但是,如果重载运算符生成常规的、预期的、可读的代码,我想知道更多关于这一点的信息,可能是库中的一个众所周知的先例,或者是一个众所周知的样式指南中的建议。我通常用输出命名函数。另外,使用动词+宾语。一些建议:
- 添加规则(或添加规则())
- 增加
- 添加了规则
- 插入
- 将添加到规则列表中
- 将添加到规则集
您还可以遵循
concat
不仅来自Python,而且还来自C和C++;它的意思是“添加项,然后返回对集合的引用”,如字符串连接或数组连接
类语法:
def concat(自我,规则):
''返回新的语法对象,并添加了'rules'。''
工作语法=grammar.concat([rule1,rule2,rule3])
您甚至可以为规则数组和其他语法对象扩展concat
方法
类语法:
def concat(自,*语法化):
grammarC=grammarA.concat(grammarB,[规则,规则])
def Get\u Copy\u添加规则(self,*规则)
?