この記事では、Python 記述子の使用法を (例とともに) 紹介します。これは一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
あなたは Python ユーザーとして、しばらく Python を使用しているかもしれませんが、Python で記述子を使用したことはないかもしれません。次は記述子の使い方の紹介です。
シーンの紹介
記述子の使用を導入するために、最初に非常に単純なクラスを設計します。
class Product(): def __init__(self,name,quantity,price): self.name = name self.quantity = quantity self.price = price
これは、商品の名前、数量、および価格を格納する商品クラスです。
製品の場合、通常、その数量と価格がマイナスにならないことが期待されます。この状況を回避するために、初期化中に次のような判断を追加できます:
class Product(): def __init__(self,name,quantity,price): self.name = name if quantity<0: raise ValueError('quantity must be >= 0') self.quantity = quantity if quantity<0: raise ValueError('price must be >= 0') self.price = price
ただし、この判断は初期化中にのみ追加され、クラス インスタンスに属性を割り当てるときに、割り当てられた値が 0
## よりも大きいという保証はまだないという欠点もあります。この問題を解決するための機能:class Product(): def __init__(self,name,quantity,price): self.name = name self.quantity = quantity self.price = price @property def quantity(self): return self._quantity @quantity.setter def quantity(self,value): if value < 0: raise ValueError('quantity must be >= 0') else: self._quantity = value @property def price(self): return self._price @price.setter def price(self, value): if value < 0: raise ValueError('price must be >= 0') else: self._price = value book = Product('mybook',6,30) print(book.quantity)
class NotNegative(): def __init__(self,name): self.name = name def __set__(self, instance, value): if value < 0: raise ValueError(self.name+' must be >= 0') else: instance.__dict__[self.name] = value class Product(): quantity = NotNegative('quantity') price = NotNegative('price') def __init__(self,name,quantity,price): self.name = name self.quantity = quantity self.price = price book = Product('mybook',2,5)
この例では、book.quantity=3 が実行されると、インタープリターは最初にインスタンス属性を検索し、数量属性があることを検出しますが、インタープリターは記述子であるクラス属性も存在することも検出します。したがって、インタプリタは最終的にこのパスに対して Descriptor を選択することになります。すると、ディスクリプタなので、ディスクリプタに設定されている特別なメソッドが実行されます。 ディスクリプタに設定された特殊メソッドのパラメータは self: ディスクリプタのインスタンスです instance: インスタンス book に相当します
##例では #value: 割り当てられる値です。
これらの属性には値に対する特別な要件がないため、この例では get 特別メソッドは実装されていません。
get メソッドには、self、instance、owner の 3 つのパラメータもあります。 self、instance は set のものと同じで、owner は例の Product クラスです。
次に、主に記述子の set メソッド
instance.__dict__[self.name] = value
以上がPython 記述子の使用法の概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。