4

取り組んでいるプロジェクトにサードパーティのライブラリ (PySphere) を使用しています。PySphere は、VMware とやり取りするためのシンプルな API を提供します。ただし、これは一般的な問題であり、このライブラリに固有のものではありません。

ライブラリの簡単な使い方は、VM オブジェクトを取得し、それに対してさまざまな操作を実行することです。

vm_obj = vcenter.get_vm_by_name("My VM")
vm_obj.get_status()
vm_obj.power_on()

vm_obj クラスにいくつかのメソッドを追加したいと思います。これらのメソッドは、VM で使用されている OS に非常に固有のものであり、ライブラリにコミットする価値はありません。今、私は次のようにしています:

set_config_x(vm_obj, args)

これは本当に不自然に思えます。vm_obj classサードパーティ ライブラリのクラス定義を直接変更せずに、自分のメソッドを に追加できるようにしたいと考えています。

4

1 に答える 1

2

クラス オブジェクト (つまり ) に任意の呼び出し可能オブジェクトをアタッチできますが、その関数はメソッドではなく、属性vm_obj.__class__を持ちません。実際のメソッドを作成するには、標準ライブラリのモジュールselfを使用できます:new

vm_obj.set_config_x = new.instancemethod(callableFunction, vm_obj, vm_obj.__class__)

wherecallableFunctionself( vm_obj) を最初の引数として取ります。

于 2013-06-01T02:29:19.913 に答える