【问题标题】:How to I modify a class of a library to get it to use my extension of another library class?如何修改一个库类以使其使用我对另一个库类的扩展?
【发布时间】:2011-01-16 22:03:08
【问题描述】:

短篇小说:

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

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

更长的:

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

我想:

  • 扩展/修改表单以使用我的扩展版 BoundField,并且
  • 扩展表单以添加一个循环遍历其字段的方法 打电话 getHtmlSpec() 。

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

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

【问题讨论】:

标签: python django oop


【解决方案1】:

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

from django.forms import forms

class MyBoundField(object):
    pass

forms.BoundField = MyBoundField

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2021-07-24
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多