Skip to main content
 首页 » 编程设计

python之如何修改库的类以使其使用我对另一个库类的扩展

2025年05月04日7zfyouxi

短篇小说:

我想在一个流行的库中对 MainClass 和它所依赖的 HelperClass 的行为进行细微的更改。我可以通过子类轻松地扩展两者,但是我如何告诉顶级类使用我的辅助类的扩展版本?

MainClass 通过简单的实例化(例如,helperItem = HelperClass())和 yield() 生成 HelperClass 的实例。 HelperClass 与 MainClass 编码在同一模块中。

更长:

对于 Django 表单,我想生成一个嵌套字典,其中包含指定该表单的 HTML 显示的数据。 Django Form 对象通过将 Field 对象包装在 BoundField 类中来生成​​ HTML,该类具有进入 Field 数据结构以生成适当的 HTML 字符串的方法。

我想:

  • 扩展/修改 Form 以使用我的扩展版本的 BoundField,并且
  • 扩展 Form 以添加循环遍历其字段的方法 呼唤 每个上都有 getHtmlSpec()。

(这里我忽略了重要的 Django 实现细节,例如是否扩展 Form 或 BaseForm,以及是否扩展 BoundField 或/和 Input 小部件。)

显然,我可以通过扩展 Form 以进入“字段”并生成这些东西来实现这一点,这可能是更好的设计。但这似乎更优雅,即使这不是最佳方法,我也很好奇。

请您参考如下方法:

这是一种设计类的丑陋方式,我想还有一种更丑陋的方式来绕过它:

from django.forms import forms 
 
class MyBoundField(object): 
    pass 
 
forms.BoundField = MyBoundField