我有一个类叫 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]
我想避免重载一个操作符,而用一个有意义的方法名。然而,如果重载操作符产生了约定俗成的、预期的、可读的代码,我想知道更多的信息--也许是库中的一个著名的先例,或者是著名的样式指南中的建议。
我通常用输出的函数来命名。另外,使用动词+对象。一些建议。
对于'返回一个新的集合,并 "添加 "新的元素'。通常的集合是什么?列表、元组、集合?
您也可以关注 PEP 8 -- Python代码风格指南
concat
不仅来自 蟒蛇 但也 C 和 C++它的意思是 "添加项目,然后返回对集合的引用",就像字符串连接,或数组连接。
class Grammar:
def concat(self, rules):
'''Returns new Grammar object, with 'rules' added.'''
working_grammer = grammar.concat([rule1, rule2, rule3])
你甚至可以扩展你的 concat
规则数组的方法和其他 Grammar
对象
class Grammar:
def concat(self, *grammarlike):
grammarC = grammarA.concat(grammarB, [ruleD, ruleE])