在Python中将方法添加到第三方库类

时间:2013-06-01 02:23:46

标签: python class oop inheritance python-2.7

我正在使用第三方库(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上使用的操作系统,并且不值得提交回库。现在我一直在这样做:

set_config_x(vm_obj, args)

这似乎真的是单声道的。我希望能够将我的方法添加到vm_obj class,而无需直接修改第三方库中的类定义。

1 个答案:

答案 0 :(得分:2)

虽然您可以将任何可调用对象附加到类对象(即vm_obj.__class__),但该函数不是方法,也不具有self属性。要制作真实的方法,您可以使用new模块from the standard library

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

其中callableFunctionselfvm_obj)作为其第一个参数。