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

2024-04-20 13:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在扩展一位前同事的代码(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的值在代码中的任何地方都不会改变。你知道吗


Tags: 代码selfidnodeforiflocalnext
3条回答

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

如果使用的\uu local\u node对象的所有成员都属于此处引用为self的类,并且这是复制粘贴狂暴的产物,我也不会感到惊讶。你知道吗

因为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)

在我看来更具可读性。而且,使用双下划线必须有很好的理由(或借口)。检查是否有可能在你的情况下摆脱他们。你知道吗

相关问题 更多 >