私はクラスDocumentを持っていますが、このクラスは実際にはインスタンス化するのが難しいので、作成するビルダーオブジェクトがあります。どちらの要素も私のものではないため、変更することはできませんビルダーでインスタンス化されたクラスから継承する方法は?
ここで、特定のメソッドを追加するだけで、Documentのサブクラスを作成します。提供ビルダーを使用して保つために、私はこれを試してみました:
class SpecialDocument(Document):
def __new__(cls, *args):
return DocumentBuilder(*args)
def __init__(self, *args, **kwargs):
#My initialization
ここでの問題は__init__
方法は__new__
方法がでSpecialDocument
(それはDocument
を返す)
を返さない原因実行したことがないということです私の特別なケース私はDocument
をどのように構築するかとは異なり、SpecialDocument
を構築する必要はありません。同じビルダーを使用する方法はありますか?そうでない場合は、どうすればいいですか?私はちょうどDocument
から継承して、特定の機能を追加したいのですが、メタクラスで実現できるかもしれませんが、私はそれらを使用したことはありません(おそらく私はそれを完全に理解していません)。問題
本当に*サブクラス*が必要ですか?あなたは、あなたが望む行動だけを追加するために委任を使うことはできませんか? – Bakuriu
'Document'と' DocumentBuilder'の関係は何ですか? –
@PhilipTzou 'DocumentBuilder'は、パラメータなしで構築された場合に新しいDocumentオブジェクトを返す独立したクラスです(パラメータが存在する場合、パラメータは実際のドキュメントへのパスです) –