4

インタラクティブな Python セッションでは、次のようなばかげたことをすることがあります。

plot.ylimits = (0,100)

ここで、plot は Plot クラスのインスタンスであり、ylimits はそのメソッドです。私はこれをタップする必要がありました:

plot.ylimits(0,100)

Python の動作では、plot オブジェクトには、タプルを値として保持する ylimits という名前の新しいメンバーが追加されました。メソッドは、元々は Plot クラスによって提供されていた実行可能サブルーチンで、以前は ylimits(...) で呼び出されていました。なくなった。心のどこかで、ylimits はプロパティであり、それに割り当てると、他の言語で行われているように、隠しセッター メソッドが呼び出されると考えているのかもしれません。

どうすればそのメソッドを取り戻すことができますか? 他の多くの変数、関数などを使用している対話型セッションにとどまりながら、プロット オブジェクトを修復するにはどうすればよいでしょうか?

reload(theplotmodule) が機能しないことがわかりました。Plot の特定のインスタンスを台無しにしてしまいました。Plot クラスやその他の定義を更新しても役に立ちません。

私はPython 2.7を使用しています

4

3 に答える 3

7

簡単な方法は、することですdel plot.ylimits。通常、メソッドはインスタンスではなくクラスで定義されます。Python は、アクセスしようとするたびに属性を検索し、インスタンスで見つからない場合はクラスに移動します。を実行するとplot.ylimits=(0,100)、新しいインスタンス アトリビュートが作成されたので、Python はそこで停止し、class アトリビュートがまだ存在していても検索しません。 del plot.ylimitsインスタンス属性を削除plot.ylimitsし、クラスを検索してメソッドに再度アクセスします。

ただし、これは、上書きしたものが元々インスタンスではなくクラスにあった場合にのみ機能することに注意してください。実際にインスタンスにデータが保存されていて、それを上書きすると、データは永久に失われます。

于 2013-01-16T06:41:00.937 に答える
1

ああ、BrenBarn の答えは私のものよりもはるかに優れていますが、それでも...

plots クラスのメソッドを使用して割り当て直し (バインドされたメソッドを保持していないと仮定)、次のように MethodType に変換します。

class C:

    def f(self):
        print "hello!"

c = C()

c.f = "opps!"

import types
c.f = types.MethodType(C.f, c)

c.f()
于 2013-01-16T06:45:13.930 に答える
0

ipython notebookを使用すると、必要に応じてコードのセグメントを再実行して変更できます。

ipython ノートブックは、ブラウザーをフロントエンドとして使用する対話型の Python インタープリターです。最初にセットアップするのは面倒ですが、探索的なコーディングには最適です。

于 2013-01-16T06:58:40.960 に答える