組み込みの Python 型をカスタム メソッドと属性で拡張するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-24 17:01:02
オリジナル
494 人が閲覧しました

How can I extend built-in Python types with custom methods and attributes?

カスタム メソッドと属性による組み込み 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート