参照:Liao XuefengのPythonチュートリアル、@ property in python
具体的なコードは次のとおりです。
#チェックされている実施形態を唯一の装飾外側の入力属性値のためにされた後、そのアクセスモード属性の保存 クラスの学生(オブジェクト): DEF __init__ (セルフ、名前、スコア): self.name = 名前 。自己を__Score = score @property #getメソッドは属性スコアをメソッド def スコア(自己)として取得します: 自分自身を返す__score @ score.setter #setメソッドスコアはプライベートプロパティであるため、特別なsetメソッドが必要です。ここでは、scoreプロパティをメソッド def として使用していますスコア(自己、スコア): IFスコア<0 またはスコア> 100 : 昇給とValueError("無効なスコア' ) セルフ。__score = スコア OBJ =学生(' ダニエル"、99 ) 印刷(obj.score) obj.score = -2 #準拠していない与えられます 印刷(obj.score)
次に、出力は次のとおりです。
D:\ Python \ venv \ Scripts \ python.exe D:/ Python / PythonLearning / test / to_property.py Traceback(most latest call last): File " D:/Python/PythonLearning/test/to_property.py "、22行、で <モジュール> obj.score = -2 #不符合将会报错 ファイル" D:/Python/PythonLearning/test/to_property.py "、ライン14 におけるスコア 上昇とValueError(' 無効スコア' ) とValueError:無効なスコア 99 プロセスは終了コード 1で終了しました
概要:このセクションの内容を最初に見たとき、私はそれを理解していませんでした〜次に、いくつかの情報を検索して注意深く考えましたが、おそらくそれは理解できました。
一部の属性には学生のスコアなどの入力値が必要なため、スコアが100ポイントの場合、スコアの妥当な範囲は0〜100なので、入力スコアを確認する必要があります。したがって、スコアをStudentオブジェクトのプライベートプロパティにしてから、対応するset_score()、get_score()メソッドを追加してスコアを設定および取得することを考えました(プライベートプロパティは直接追加または取得できないため)。
ただし、これを行うことにより、毎回スコアを設定または取得するコードを記述する必要があります(オブジェクトインスタンスがaであると想定)a.set_score()およびa.get_score()(ここでは、スコアをプライベートプロパティにした後、設定が必要であるとのみ言われています)そして、スコアを取得する2つの方法、およびこれらの2つの方法はスコアと同じであってはなりません!そうしないとあいまいになります)。
このフォームは非常に「扱いにくい」ものであり、Pythonがメソッド名を変数に割り当てることができると考えられたため、上記のフォームのデコレータメソッドがあります。これにより、元の便利なアクセス形式を確保しながら、プロパティの値を確認することができます。
しかし、最終的には冷笑したいのですが、実際には、a.set_score()とa.get_score()を使用してスコアにアクセスするのはそれほど面倒ではありません。??デコレータを取得する方法は、属性とメソッドを区別できないようにするのが本当に簡単です~~~