【问题标题】:Add methods to a third party library class in Python在 Python 中向第三方库类添加方法
【发布时间】:2013-05-27 22:27:56
【问题描述】:

我正在为我正在进行的项目使用第三方库 (PySphere)。 PySphere 提供了一个简单的 API 来与 VMware 交互。这是一个普遍的问题,并非特定于这个库。

该库的一个简单用途是获取一个 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,而无需直接修改第三方库中的类定义。

【问题讨论】:

    标签: python class oop inheritance python-2.7


    【解决方案1】:

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

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

    其中callableFunctionself (vm_obj) 作为其第一个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多