У меня есть документ класса, этот класс действительно сложный для создания экземпляра, поэтому у меня есть объект-строитель для их создания. Оба элемента не мои, поэтому я не могу их изменитьКак наследовать от класса, созданного с помощью построителя?
Теперь я хочу создать подкласс документа, просто чтобы добавить некоторые конкретные методы. Для того, чтобы продолжать использовать предоставленный строитель Я попытался это:
class SpecialDocument(Document):
def __new__(cls, *args):
return DocumentBuilder(*args)
def __init__(self, *args, **kwargs):
#My initialization
Проблема здесь состоит в том, что метод __init__
никогда не выполняет вызвать метод __new__
не возвращает SpecialDocument
(Он возвращает Document
)
В в моем конкретном случае мне не нужно строить мой SpecialDocument
по-другому от того, как я строю Document
. Есть ли способ использовать один и тот же построитель? Если нет, как я могу это достичь? Я просто хочу унаследовать от Document
, чтобы добавить определенные функции, возможно, это может быть достигнуто с помощью метаклассов, но я никогда не использовал их (возможно, потому что я не совсем понимаю это), немного проницательность для них была бы хорошей, если бы она помогла решить мои проблема
Вам действительно нужен подкласс *? Не можете ли вы просто использовать делегирование только для добавления поведения, которое вы хотите? – Bakuriu
Какая связь между 'Document' и' DocumentBuilder'? –
@PhilipTzou 'DocumentBuilder' является независимым классом, который возвращает новый объект Document, если он сконструирован без параметров или инициирует его переменные, если он получает параметр (параметр - путь к фактическому документу, если он существует) –