私はすべてのノードが何らかのプロトコルに従う分散システムをシミュレートしています。これには、プロトコルの小さなバリエーションの評価も含まれます。変形とは、単一の方法の代替実施を意味する。 すべてノードは常に同じパターンに従います。パターンは実験設定によって決まります(ある時点で1つの設定だけが有効です)。パフォーマンスを犠牲にすることなく、最も明確な方法は何ですか?Pythonでクラスを設定する最もエレガントな方法は?
実験が非常に広範囲になる可能性があるため、私は明らかに条件を必要としません。前に私は同じように、継承を使用しました:
class Node(object):
def dumb_method(self, argument):
# ...
def slow_method(self, argument):
# ...
# A lot more methods
class SmarterNode(Node):
def dumb_method(self, argument):
# A somewhat smarter variant ...
class FasterNode(SmarterNode):
def slow_method(self, argument):
# A faster variant ...
しかし、今、私はすべての可能な変形にをテストする必要があるとソースを乱雑クラスの指数関数的な数を望んでいません。私はまた、他の人々が最小限の労力でコードを理解して理解してもらいたい。あなたの提案は何ですか?
編集:私が十分強調していなかったことの1つ:想定されているすべてのユースケースについて、設定時にクラスをパッチするのは良いと思われます。つまり、単純に作業することができます。Node.dumb_method = smart_method
しかし、どういうわけか、はという感じがしませんでした。この種の解決策は、ランダムなスマートリーダーに重大な頭痛を引き起こすでしょうか?あなたはこれに似た何かをしようとしている場合、私はわからない
メソッドのリストを維持しますか?私が見る限り、専用のクラスを必要とするものはありません。戦略パターンを見てみましょう。 – phant0m
はい、多かれ少なかれ*戦略*があります。しかし、ここでは、いつでも、各クライアントがまったく同じ戦略を使用するように、より制約されています。したがって、アルゴリズムをカプセル化するオブジェクトは冗長であり、リソースの無駄を避けたいと考えています。 – lRem
しかし、あなたはすでにアルゴリズムを "カプセル化"しているオブジェクトを持っています:クラス。各クラスはオブジェクトのインスタンスであることを覚えておいてください(デフォルトでは 'type'でメタクラスです) – phant0m