01.シナリオと方法を定義
シナリオ
- 実際の開発では、オブジェクト の プロパティやメソッドの一部は、 唯一にしたいことがあり 、オブジェクトの内部で使用されている間、 に、外部からアクセスされることを望むものではありません
- プライベートプロパティ である オブジェクト 公開したくない プロパティを
- プライベートメソッドは、 ある オブジェクト を開示したくない 方法を
定義された方法
- で プロパティやメソッドの定義、 以前のプロパティ名やメソッド名 高めるために 2つのアンダースコアを、の定義である プライベート プロパティまたはメソッド
クラス:女性 DEF __init__ (セルフ、名): self.name = 名前の #は、女性の年齢聞かないでください 。自己を__age = 18 DEF __secret (セルフ): 印刷(" 私の年齢がD%である"。%の自己__age ) A =女性(「アリス」) 印刷(A) ##私有財産、直接外部アクセスすることはできません #1 A .__年齢 #プライベートメソッドを、直接外部アクセスすることはできません 。#.__ Aの秘密を()
02.擬似プライベート属性とプライベート(科学)の方法
ヒント:毎日の開発では、この方法を使用していない、私有財産やプライベートメソッドのオブジェクトへのアクセスを
Python
、何もありません 本当の意味 の プライベート
- 与える プロパティ、メソッドの 命名は、実際のある 名前 、外の世界がアクセス権を持つことができないように、いくつかの特別な処理を行うには
- 治療:内 の名前 の前に
_类名
=>_类名__名称
印刷(a._Women__age) #私有財産が直接外部にアクセスすることはできません 印刷(a._Women__secret()) #プライベートメソッドが直接外部アクセスすることはできません
03.get機能と設定機能
解決私有財産の問題への外部アクセス
機能を得る:値を取得します
設定機能:[値によって割り当て]の値を設定します
説明:基本的に通常のメンバ関数、一般的な関数が値を返す取得、設定パラメータの設定
クラス:女性 DEF __init__ (セルフ、名): self.name = 名前の #は聞かないでください、女性の年齢 セルフ。__age = 18 DEF setAge(自己): 。自己__age = 18 DEF getAge(セルフ): リターン。自己__ageのDEFの__secret (自己): 印刷(" 私の年齢のDの%"。自己%の__age ) A =女性(' アリス' ) を印刷(a.getAge()) ""「18です
@propertyデコレータは:変数の使用として機能します
取得および設定機能を簡素化
使用:機能に作用する@propertyデコレータ、取得するには、対応する機能を
同時に、それは割り当てのために設定されている機能と同等の新しいデコレータ@属性名.setterを、生成されます。
注:@property装飾部材は、クラス内のメソッドは、パラメータことを保証するために確認しながら、簡略化されたコードで使用することができます
クラスパーソン: DEF __init__ (セルフ、名前、年齢): セルフ。__name__ = 名前 セルフ。__age = 年齢の #1 注:ネーミング機能は、機能を取得し、 #という名前の関数は、固定されていない限り、有効な識別子として、することができ #通常の状況、区別しやすいという名前の変数名の使用の下で、しかし @propertyの DEFの名前(自己): リターン。自己__name__ #1 注:ネーミング機能:役割と機能名@property一貫した #のデコレータ命名:.setter @属性名 #同等の機能が設定されているプロパティの民営化に割り当てられ、パラメータを設定し、 @のname.setter DEFの:名前(自己、名前) 。自己__name__ =名前 @property デフ年齢(自己): 返す自己を。__age @ age.setter デフ年齢(自己、年齢): もし年齢< 0: 年齢 = 0 の自己。__age = 年齢 P1 =人(" ジャック"、15 ) 印刷(p1.name) #>>ジャック p1.name = ' トム' プリント(p1.name) #>>トム