非变异的 "添加 "到一个集合的命名惯例。

问题描述 投票:0回答:1

我有一个类叫 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]

我想避免重载一个操作符,而用一个有意义的方法名。然而,如果重载操作符产生了约定俗成的、预期的、可读的代码,我想知道更多的信息--也许是库中的一个著名的先例,或者是著名的样式指南中的建议。

python collections naming-conventions immutability
1个回答
1
投票

我通常用输出的函数来命名。另外,使用动词+对象。一些建议。

  • add_rule (或addRule())
  • 附加
  • 添加的规则
  • 插入

对于'返回一个新的集合,并 "添加 "新的元素'。通常的集合是什么?列表、元组、集合?

  • add_to_rule_list
  • add_to_rule_set

您也可以关注 PEP 8 -- Python代码风格指南


1
投票

concat 不仅来自 蟒蛇 但也 CC++它的意思是 "添加项目,然后返回对集合的引用",就像字符串连接,或数组连接。

class Grammar:

    def concat(self, rules):
        '''Returns new Grammar object, with 'rules' added.'''


working_grammer = grammar.concat([rule1, rule2, rule3])

pandas.concat

你甚至可以扩展你的 concat 规则数组的方法和其他 Grammar 对象

class Grammar:
    def concat(self, *grammarlike):

grammarC = grammarA.concat(grammarB, [ruleD, ruleE])
© www.soinside.com 2019 - 2024. All rights reserved.