4

では、Pythonic とは何かについての別の質問です。この場合のアプリケーション ドメインは、ネットワーク アルゴリズム (ノード、エッジ、ダイクストラ、そのようなものなど) であり、以前は厳密に型指定された言語でコーディングしただけで、すべてが何であるかを非常に確信できるものです

一方、Python では、クラスがNetあります。このクラスの 1 つのインスタンスがネットワークを表します。Edgeネットワーク内のエッジごとにインスタンス化されるクラスがあります。各Edgeインスタンスには、とりわけ固有の がありidます。

Edge関連するインスタンスを参照してエッジを削除したい場合があります。を使用して Edge を削除したい場合もありidます。正直なところ、どの変数がEdgesで、どれが であるかを見失い始めていますids。この仕事にはC++を好んだと思います:-P

そこで、2 つの解決策を提案します。

  1. システムのハンガリー語表記の使用を開始します。変数に適切な名前を付けて、それらが実際の Edge オブジェクトなのか、必要な Edge の ID なのかがわかるようにします。強力な型付けを実装する - make remove_edge(これは on のメソッドですNet) ではないものを明示的に拒否しEdgeます。remove_edge_id関連するものを検索してEdgeからid呼び出すラッパー関数を作成しますremove_edge。同様に、この関数は ではないものをすべて拒否しidます。

  2. ダックタイピングを使用します。remove_edge引数が anidまたは anであるかどうかを確認Edgeし、正しいことを行うだけです。

一体いつ計算するの?

4

3 に答える 3

2

私は両方のミックスと言うでしょう。

(ほとんどの場合) オブジェクトを見て、それが何であるか、または何をする可能性があるかがわかるように、オブジェクトの名前を付けることをお勧めします。edgeエッジとエッジ ID に名前を付けますedge_id

私はおそらくあなたのダックタイピングのアイデアをremove_edge.

def remove_edge(edge):
    if isinstance(edge, int):
        edge = get_edge_from_id(edge)
    #delete edge here!!
于 2011-10-27T16:46:32.553 に答える