1.Python 3でのproperty()関数学習

1830 ワード

Pythonはオブジェクト向けにプログラミングされた言語なので、クラス属性とその(付与、アクセス、削除、説明)は非常に重要な要素です.ネット上でこの関数の説明があるのを見て、彼らはすべて徹底的に話していないような気がします.以下、「Python基礎チュートリアル」9.5節のコードで説明します.
従来のプロパティメソッド
  • クラス定義
  • class Rectangle():
        def __init__(self):
            self.height = 0
            self.width =0
        def setSize(self,size):
            self.height, self.width = size
        def getSize(self):
            return self.height,self.width
    #    size = property(getSize, setSize) #(  :      !!!)
    
  • 属性設定とアクセス
  • myRect = Rectangle()
    myRect.height = 100 #   1:  
    myRect.setSize(100,200)#   2:     
    height = myRect.height #   1:   
    height, width = myRect.getSize()#   2:     
    
  • 問題
  • 新しい記述プロパティ(size = (height, width))を使用する必要がある場合は、どうすればいいですか?self.sizeと対応するアクセサメソッドを再定義することはできますが、元に作成されたクラスは基本的に廃棄されます.size属性の付与、アクセス、削除、説明操作を再実現し、size、height、widthのデータ同期を処理し、頭が痛いからです.
  • この一連の属性を実現するには、property関数という別の方法があります.

  • プロパティ関数構築プロパティ
  • 新しいクラスの定義(文が1つしかない)
  • class Rectangle():
        def __init__(self):
            self.height = 0
            self.width =0
        def setSize(self,size):
            self.height, self.width = size
        def getSize(self):
            return self.height, self.width
        size = property(getSize, setSize) #(  :     !!!)
    

    説明:
  • の新しい記述属性(size = (height, width))はproperty関数によって間接的に生成される.(.size)で設定してアクセスできます.
  • 構文は、新しいプロパティ=property(読み取り関数、設定関数、削除関数、ドキュメント関数)です.設定関数が指定されていない場合は、このプロパティは読み取り可能で書き込み不可です.読み取り関数もない場合は、このプロパティは読み取り不可です.
  • 属性設定とアクセス
  • myRect = Rectangle()
    myRect.height = 100 #   1:  
    myRect.setSize(100,200)#   2:     
    height = myRect.height #   1:   
    height, width = myRect.getSize()#   2:     
    myRect.size = (100,200) #     property       
    size = myRect.size     #