Python 我应该继续在代码中使用self.\u local\u对象吗?

Python 我应该继续在代码中使用self.\u local\u对象吗?,python,oop,code-readability,Python,Oop,Code Readability,我正在扩展一位前同事的代码(Python3),并亲自发现那些重复的self.\uu local\u object.x=some\u result很烦人,阻碍了可读性。即代替 self.__local_node.sign("computing partition for joining node %f<?<%f"%( self.__local_node.partition_id,next_neighbour.partition_id)) partition_i

我正在扩展一位前同事的代码(Python3),并亲自发现那些重复的
self.\uu local\u object.x=some\u result
很烦人,阻碍了可读性。即代替

 self.__local_node.sign("computing partition for joining node %f<?<%f"%(
        self.__local_node.partition_id,next_neighbour.partition_id))
    partition_id = 0
    if(next_neighbour != self.__local_node):
        partition_id = PartitionID.gen_btw(self.__local_node.partition_id, next_neighbour.partition_id)

self.\u local\u node.sign("计算加入节点%f的分区如果您真的不更改值,只分配或访问其属性,这应该是完全正常的。

如果使用的\uuu local\u节点对象的所有成员都属于此处引用为self的类,并且这是副本和粘贴横冲直撞。

由于
local\u node
next\u neighbor
是对称的,因此最好将代码提取到单独的方法中:

def compute_partition(self, a, b):
    a.sign("computing partition for joining node %f<?<%f" % (
        a.partition_id, b.partition_id))
    partition_id = 0
    if a != b:
        partition_id = PartitionID.gen_btw(a.partition_id, b.partition_id)
    etc...

....

self.compute_partition(self.local_node, next_neighbour)
def计算分区(self、a、b):

a、 标志("计算加入节点%f的分区你的意思是像self.partition\u id一样存在,没有必要做self.\uu local\u node.partition\u id?事实并非如此。嗯,我不会这样写。也许再读一次Python的Zen,看看它的感觉如何。我完全同意,并会按照你的方式来写。谢谢你的帮助他提出了一本书的建议。我正在努力寻找一本书,这本书的重点是解释python,而不是循环和条件表达式……在这方面,这里的库非常可怜。哈哈,不需要书,只需要python。每当你迷路的时候,试着在你的解释器中导入这本书。我认为使用双下划线是最好的方法python中的“private”成员。我必须承认,到目前为止我还没有尝试使用单下划线。@sylvainulg:双下划线调用名称混乱规则(请参阅),并可用于“模糊”名称。通常不是一个好主意。“为了避免与子类发生名称冲突,请使用两个前导下划线来调用python的名称混乱规则。“--对我来说,这听起来就像是私人成员的定义:不应该允许任何外部成员修改它。顺便说一句,我承认在调试和编码时这是一个真正的痛苦。你在这里建议的重构很有趣,也很有启发性,顺便说一句。
def compute_partition(self, a, b):
    a.sign("computing partition for joining node %f<?<%f" % (
        a.partition_id, b.partition_id))
    partition_id = 0
    if a != b:
        partition_id = PartitionID.gen_btw(a.partition_id, b.partition_id)
    etc...

....

self.compute_partition(self.local_node, next_neighbour)