2013-06-01 109 views
4

我正在使用第三方庫(PySphere)作爲我正在處理的項目。 PySphere提供了一個簡單的API來與VMware進行交互。這是一個普遍的問題,不是特定於這個庫。將方法添加到Python中的第三方庫類

一個簡單的使用圖書館將得到一個VM對象,然後就可以執行各種操作:

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

我想一些方法添加到vm_obj類。這些方法對於VM上使用的操作系統非常具體,並且不值得將其重新提交給庫。現在我一直在這樣做:

set_config_x(vm_obj, args) 

這似乎真的unpythonic。我希望能夠將我的方法添加到vm_obj class,而無需直接修改第三方庫中的類定義。

回答

2

雖然可以將任何可調用對象附加到類對象(即vm_obj.__class__),但該函數不會是方法,也不會具有self屬性。爲了做一個真正的方法,可以使用new模塊from the standard library

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

其中callableFunction需要selfvm_obj)作爲第一個參數。