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

时间:2011-01-16 22:03:08

标签: python django oop

短篇小说:

我想在一个流行的库中对MainClass和它所依赖的HelperClass的行为稍作修改。我可以通过子类化轻松扩展,但是如何告诉顶级类使用我的扩展版助手类?

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

更长:

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

我想:

  • 扩展/修改表单以使用我的扩展版本的BoundField和
  • 扩展Form以添加循环遍历其字段的方法 调用    每个都有getHtmlSpec()。

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

显然,我可以通过扩展Form来达到'fields'并生成这些东西,这可能是更好的设计。但这似乎更优雅,即使不是最好的方法,我也很好奇。

1 个答案:

答案 0 :(得分:1)

这是设计课程的一种丑陋方式,我想有一种更为丑陋的方法可以解决这个问题:

from django.forms import forms

class MyBoundField(object):
    pass

forms.BoundField = MyBoundField