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_nodeとは対称的であるためnext_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

__local_nodeオブジェクトのすべてのメンバーが、ここでselfとして参照されているクラスに属していたとしても驚かないでしょう。これは、コピー アンド ペーストの大暴れの産物です。

于 2012-08-28T08:40:43.867 に答える
0

本当に値を変更せず、その属性を割り当てるかアクセスするだけであれば、これで問題ありません。

于 2012-08-28T08:28:55.920 に答える