Skip to main content
 首页 » 编程设计

python之将属性添加到 Python 库中的基类并继承它的正确方法是什么

2025年05月04日12telwanggs

我正在尝试扩展 Python 库以添加我想要的功能。该库提供了许多 HTML 表单对象(例如 Textbox、Dropdown、Checkbox 等),它们都派生自 输入对象。我想为所有这些派生对象添加一个附加属性。正确的处理方式是什么?

我可以:

  1. 修改Input类的原始源代码,添加我想要的属性。
  2. 创建一个继承Input并添加我的属性的新类,然后创建一堆继承Textbox、Dropdown的新类,和我的新 Input 类。
  3. 使用属性为 Textbox、Dropdown 等创建新类。

解决方案 1 是最简单和最简单的,但本质上是错误的,而其他两个似乎比此任务应要求的工作和代码重复要多得多。

有没有我缺少的解决方案?

请您参考如下方法:

第四个解决方案是猴子补丁,可能是个好主意。在尝试之前,请确保这不会破坏现在或将来的任何东西:

def additional_method(self, arg): 
    print("hello", arg) 
 
Input.additional_method = additional_method 

或简称:

Input.additional_method = lambda self, arg: do_something(arg) 

现在所有现有的和 future 的 Input 实例(以及所有 Input 子类的实例)都附加了一个 additional_method。

这也适用于 Input 的任何 future 子类,这些子类在添加方法时可能还不存在,或者您可能没有意识到,因此更好(即更通用) 而不是创建一个替代的继承层次结构,您必须维护它并与上游更改保持同步。

注意:在你因为它包含短语“猴子补丁”而投反对票之前,请考虑猴子补丁不一定是危险的/脆弱的,并且是一流的(如“受人尊敬的” ") 支持多种语言。