Как изменить класс библиотеки, чтобы он использовал мое расширение другого библиотечного класса? - PullRequest
2 голосов
/ 17 января 2011

Краткая история:

Я хочу внести небольшие изменения в поведение MainClass и HelperClass, от которых он зависит, в популярной библиотеке.Я могу легко расширить оба подкласса, но как мне сказать классу верхнего уровня использовать мою расширенную версию вспомогательного класса?

MainClass генерирует экземпляры HelperClass посредством простого создания экземпляра (например, helperItem = HelperClass ()) и yield ().HelperClass кодируется в том же модуле, что и MainClass.

Longer:

Для формы Django я хочу создать вложенный словарь, содержащий данные, определяющие отображение HTML этой формы.Объекты Django Form генерируют HTML, оборачивая объекты Field в класс BoundField, у которого есть методы для доступа к структурам данных Field для создания соответствующих строк HTML.

Я хочу:

  • расширить / изменить форму, чтобы использовать мою расширенную версию BoundField, и
  • расширить форму, чтобы добавить метод, который циклически просматривает поля, вызываяgetHtmlSpec () для каждого.

(Здесь я замалчиваю важные детали реализации Django, например, следует ли расширять Form или BaseForm и расширять ли виджеты BoundField или / и Input.)

Очевидно, что я мог бы сделать это, расширив Form, чтобы добраться до «полей» и генерировать эти вещи, и это могло бы стать лучшим дизайном.Но это кажется более элегантным, и мне любопытно, даже если это не лучший подход.

1 Ответ

1 голос
/ 17 января 2011

Это некрасивый способ создания класса, и я думаю, что есть еще более уродливый способ его взломать:

from django.forms import forms

class MyBoundField(object):
    pass

forms.BoundField = MyBoundField
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...