0

私はOOPパラダイムのコツをつかんでいます。拡張可能で再利用可能なコードを作成する技術は、私が改善したいものです。理論的には、広く使用されているユーティリティクラスのPythonライブラリがあるとしましょう。使いやすさのために、同じコードを持つ便利な静的メソッドを特定のクラスに追加したいのですが、ライブラリの既存の使用法を壊したくありません。新しいクラスメソッドを実装して名前を付けるための推奨される方法は何ですか?私は次のようにいくつかの推測があります:

1)明確さを維持するためにオーバーロードされたメソッド名を使用しますか?Pythonは実際には良い例ではありませんが、Javaなどの他の言語ではどうでしょうか。例えば:

class Cat(object):
    def __init__(self, name):
        self.name = name

    def meow(self):
        meow(self.name)

    @staticmethod
    def meow(name): # <-- Granted, Python doesn't overload method names
        print "{} meowed cutely!".format(name)

2)別の、おそらく意味の少ない静的メソッド名を使用しますか?古い名前は変更できないので...これは、同じメソッドの静的バージョンだけに意味のない名前がたくさんあるため、巨大なプロジェクトでは手に負えなくなる可能性があるようです。例:

class Cat(object):
    def __init__(self, name):
        self.name = name

    def meow(self):
        meowFrom(self.name)

    @staticmethod
    def meowFrom(name): # Different, possibly less semantic name
        print "{} meowed cutely!".format(name)

コードを完全に複製するのは悪い考えだと思います。どちらに行くのですか?それとも、より良いデザインパターンがありますか?私が知らないPythonに固有の何か?将来、自分のコードに価値がないことを確認したいと思います。そして、将来のプロジェクトのために拡張可能ないくつかの個人的なライブラリを作成します。

4

1 に答える 1

1

関数の既存の使用法を壊すことなく、オプションのパラメーターとキーワードパラメーターを関数に追加できます。たとえば、protocol = old引数を最後に追加して、使用する動作を選択できます。明示的なパラメータがない場合は、古い動作がデフォルトになります。これは、同じ関数名を維持したい場合に最適なオプションですが、複数回実行するとすぐに扱いにくくなる可能性があります。

于 2012-07-01T01:38:31.587 に答える