0

我正在扩展一位前同事的代码(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' 的值在该代码的任何地方都没有改变。

4

3 回答 3

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)

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

于 2012-08-28T08:47:45.417 回答
0

如果你真的不改变值,只分配或访问它的属性,这应该是完全可以的。

于 2012-08-28T08:28:55.920 回答
0

如果__local_node对象的所有成员都使用属于此处引用为self的类,我不会感到惊讶,这是复制和粘贴横冲直撞的产物。

于 2012-08-28T08:40:43.867 回答