カスタム メソッドと属性による組み込み Python 型の拡張
Python では、組み込み型を拡張したい場合があります。追加のメソッドまたは属性を持つ型。ただし、これらの型を直接変更することは許可されていません。
たとえば、JavaScript で示されているように、dict 型に helloWorld() メソッドを追加しようとすると、そのようなアプローチはサポートされていないことがわかります。
サブクラス化と名前空間置換を使用した回避策
元の型を直接拡張することはできませんが、賢明な回避策が存在します。ターゲットの型をサブクラス化し、その後それを組み込み/グローバル名前空間内で置き換えることで、目的の動作を効果的に模倣できます。
Python での実装は次のとおりです。
<code class="python"># Built-in namespace import __builtin__ # Extended subclass class mystr(str): def first_last(self): if self: return self[0] + self[-1] else: return '' # Substitute the original str with the subclass on the built-in namespace __builtin__.str = mystr print(str(1234).first_last()) # 14 print(str(0).first_last()) # 00 print(str('').first_last()) # '' # Note that objects created by literal syntax will not have the extended methods print('0'.first_last()) # AttributeError: 'str' object has no attribute 'first_last'</code>
この例ではmystr サブクラスは、first_last() メソッドを追加することで str 型を拡張します。 __builtin__.str 割り当ては、すべての組み込み str 呼び出しをリダイレクトし、代わりに変更されたサブクラスを使用します。その結果、組み込みの str() コンストラクターでインスタンス化されたオブジェクトは、first_last() メソッドを所有するようになりました。
ただし、リテラル構文 ('string') を使用して作成されたオブジェクトは、次のインスタンスのままであることに注意することが重要です。変更されていない str 型であり、カスタム メソッドは継承されません。
以上が組み込みの Python 型をカスタム メソッドと属性で拡張するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。