我应该继续在整个代码中使用self .__ local_object吗?

时间:2012-08-28 08:22:36

标签: python oop code-readability

我正在扩展一位前同事的代码(Python3)并亲自找到那些重复self.__local_object.x=some_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)

我宁愿使用

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

然而,我还没有使用Python开发经验,如果我为引用的对象引入这样的(希望的)本地别名,我可能会错过一个让进一步维护成为噩梦的黄金指南。

PS:不,self.__local_node的值不会在该代码中的任何地方改变。

3 个答案:

答案 0 :(得分:2)

由于local_nodenext_neighbour是对称的,因此将代码提取到单独的方法中可能是个好主意:

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)
在我看来,

更具可读性。此外,使用双下划线必须有很好的理由(或借口)。检查是否可以在你的情况下摆脱它们。

答案 1 :(得分:0)

如果你真的没有改变这个值,只能分配和访问它的属性,这应该是完全可以的。

答案 2 :(得分:0)

如果 __ local_node 对象的所有成员都使用属于此处引用的类 self ,我不会感到惊讶,这是副本的产品并粘贴横冲直撞。