2016-05-31 8 views
0

私は関数の1つをオーバーライドする必要があるPythonライブラリを使用しています。さんは今、この module.pyPythonライブラリの関数をオーバーライドするにはどうすればよいですか?

def dump(nodes, args = 'bleh'): 
    ...validation checks 
    for node in nodes: 
    print(node, someother_args) 

def print_node(node, someother_args): 
    ...prints in some way i don't want 

を呼びましょう、私はこのダンプ方法を使用していると私は、私は別の方法でそれを印刷したいので、私自身のprint_node方法でprint_node関数をオーバーライドします。それをする最善の方法は何ですか?

+0

注意を以下のような何かを行うことができます。 print_functionをファイルの先頭からインポートして変更することができます(これはpython3で変更されています)。 –

+0

これは実行可能ですが、ほとんど常に悪い考えです。 – user2357112

+0

@ user2357112タイトルの質問は悪い考えですが、パリが実際にやろうとしていることは、IMOではありません。デフォルトの関数を上書きすることで保守性の問題が生じるかもしれませんが、カスタム印刷機能を使用したいのは間違いありません。たとえば、print_and_logという名前で別の名前をつけて印刷したり、ログに書き込んだりすると便利でしょう。 –

答えて

0

目的のモジュールから継承したクラスを自分で作成し、任意の方法でその関数を上書きすることができます。次に、module.pyの代わりにオブジェクトを使用できます。

class my_class(module): 
    def __init__(self, *args, **kwargs): 
     super(my_class, self).__init__(*args, **kwargs) 
    def dump(self): 
     # do stuff 

あなたのモジュールにはたくさんの機能が含まれている場合は、現在のモジュールで新しい機能を定義することをお勧めします。次に、その関数名に割り当てることができます。

@Joranビーズリーも述べたように、あなたはpython2.7でこれをタグ付け、および2.7印刷に関数ではありませんしました

import my_file 
my_file.dump = my_local_dump_fn 
+0

そのモジュールにはクラスがありません。それは機能の束です。 –

+0

その場合、現在のモジュールで新しい関数を定義しないでください。次に、その関数名に割り当てることができます。 – Kasramvd

+1

'import my_file'; 'my_file.dump = my_local_dump_fn'これを行った後にこのメソッドをインポートする場所では、オーバーライドされた関数を取得する必要があります。 –

関連する問題