ホームページ >バックエンド開発 >Python チュートリアル >Python ディスクリプタは何をするのでしょうか?
Python 記述子の役割: クラスの属性をプロキシし、プログラマーがオブジェクト属性を参照するときに実行する作業をカスタマイズできるようにします。これは、ほとんどの Python クラスの最下位レベルのデータ構造の実装です。 features メソッドは、デコレータまたはメタクラスを使用する大規模なフレームワークにおいて非常に重要なコンポーネントです。
#この記事では主にディスクリプタの定義と個人的な理解を紹介します。この記事を読んで、記述子についてより明確に理解できることを願っています。
記述子とは
正式な定義: 記述子は、「結合動作」を持つオブジェクト属性です。そのプロパティにアクセス (取得、設定、削除) する場合、実際には特別なメソッド (_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 ディスクリプタは何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。