Python ディスクリプタは何をするのでしょうか?

(*-*)浩
リリース: 2020-09-18 12:08:43
オリジナル
4825 人が閲覧しました

Python 記述子の役割: クラスの属性をプロキシし、プログラマーがオブジェクト属性を参照するときに実行する作業をカスタマイズできるようにします。これは、ほとんどの Python クラスの最下位レベルのデータ構造の実装です。 features メソッドは、デコレータまたはメタクラスを使用する大規模なフレームワークにおいて非常に重要なコンポーネントです。

Python ディスクリプタは何をするのでしょうか?

#この記事では主にディスクリプタの定義と個人的な理解を紹介します。この記事を読んで、記述子についてより明確に理解できることを願っています。

記述子とは

正式な定義: 記述子は、「結合動作」を持つオブジェクト属性です。そのプロパティにアクセス (取得、設定、削除) する場合、実際には特別なメソッド (_get_()、_set_()、_delete_()) が呼び出されます。つまり、オブジェクトがこれら 3 つのメソッドのいずれかを定義している場合、それは記述子です。

記述子の機能は、クラスの属性を代理することです。記述子は、使用するクラスのコンストラクター内で定義することはできません。クラスの属性としてのみ定義できることに注意してください。これはクラスにのみ属しており、インスタンスには属していないため、インスタンスとクラスの辞書を調べることで確認できます。

記述子は、ほとんどの Python クラス機能で最下位レベルのデータ構造を実装する手段です。多くの場合、@classmethod、@staticmethd、@property、さらには __slots__ などの属性が使用されます。これは、次の方法で実現されます。記述子。これは、多くの高レベルのライブラリやフレームワークにとって重要なツールの 1 つであり、デコレータやメタクラスを使用する大規模なフレームワークでは非常に重要なコンポーネントです。注: デコレータやメタクラスなどの概念については、今後の記事で説明します。

以下は、記述子と記述子クラスを参照するコードの例です。

class Descriptors:
 
    def __init__(self, key, value_type):
        self.key = key
        self.value_type = value_type
 
    def __get__(self, instance, owner):
        print("执行Descriptors的get")
        return instance.__dict__[self.key]
 
    def __set__(self, instance, value):
        print("执行Descriptors的set")
        if not isinstance(value, self.value_type):
            raise TypeError("参数%s必须为%s"%(self.key, self.value_type))
        instance.__dict__[self.key] = value 
 
    def __delete__(self, instance):
        print("执行Descriptors的delete")
        instance.__dict__.pop(self.key) 
 
class Person:
 
    name = Descriptors("name", str)
    age = Descriptors("age", int)
 
    def __init__(self, name, age):
        self.name = name
        self.age = age
 
 
person = Person("xiaoming", 15)
print(person.__dict__)
person.name
person.name = "jone"
print(person.__dict__)
ログイン後にコピー

このうち、Descriptors クラスは記述子であり、Person は記述子を使用するクラスです。 。

クラスの __dict__ 属性は、クラスの組み込み属性です。クラスの静的関数、クラス関数、通常の関数、グローバル変数、および一部の組み込み属性は、クラス __dict__ に配置されます。

ディスクリプタ変数を出力する場合は、ディスクリプタ内の __get__ メソッドが呼び出され、ディスクリプタ変数を設定する場合は、ディスクリプタ内の __set__ メソッドが呼び出されます。

上記の例の結果は次のとおりです:

Python ディスクリプタは何をするのでしょうか?

以上がPython ディスクリプタは何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!