#をカプセル化する第一層は:クラスの定義
第二の層をカプセル化する#を:内部と外部の区別、いくつかのプロパティのみが、内部的に使用することができない外部
クラス名:
__A =「あなたは豚です」#変数のカプセル化A
DEF __init __(自己、名):
セルフ。名前=名前
DEF get_name(セルフ):
印刷( '私の名前S%' %のself.name)
N1は、名前( '陳Yuxia')=
印刷(名.__ dict__に)#Viewクラスは、辞書属性
印刷(n1._Name__a)#缶をこのようコール__aは、本当のパッケージはありません
#本物のパッケージ:内部と外部の区別は、関数呼び出しの外で知ることができない、達成するための内部ロジックにアクセスするためのインタフェースをユーザーに提供するために、
クラスルーム:
DEFの__init __(自己、名前、レンを、幅):
self.name名=
自己.__ =レンレン
自己.__幅=幅
DEF GET(セルフ):#インタフェース機能、聞かせてのは、隠し属性の外部呼び出し
リターンレン*セルフセルフ.__ .__幅
R1 =ルーム(「トイレ」 、100,50)
印刷(r1.get())#外部関数を呼び出すことによって取得
#結果:
{ '__module__': '__main__'、 '_Name__a': '你是猪'、 '__init__' <関数名.__ init__ 0x00000232CEB08EA0で>、 'get_name' <0x00000232CEB08E18で機能Name.get_name>、 '__dict__' < '名前'オブジェクトの属性'__dict__'> '__weakref__': '名前'オブジェクトの<属性'__weakref__'> '__doc__':なし}
你是猪
5000
#検出プログラムは、独自の機能を持っている
:クラスルーム
DEF __init __(自己、名前、レン、幅):
self.name名=
自己.__ =レンレン
自己.__幅=幅
DEF GET(セルフ):#インタフェース機能、LETの外部にコール隠された属性
リターンレン自己.__ *自己.__幅
R1 =ルーム( 'WC'、100,50)
印刷(はhasattr(R1 '名前'))属性名があるかどうかの例#r1を検出し
、印刷(GETATTR(r1は、 「名前」))#取得インスタンスの属性の値
SETATTR(R1、「名前」、 「 寝室」)#インスタンスの属性変更値
を印刷(r1.name)
delattr(R1「名前」)インスタンス属性番号の値を削除します
印刷(R1 .__ dict__にマジック)
使用の#1はhasattrのメリット
クラスにFTPを:
DEF __init __(自己、ADDR):
印刷(ADDR% "を、サーバS%への接続")
self.addrのaddr =
F1 = FTP(「1.1.1。1' )
hasattr場合(FTP、 '取得' ):# FTP get関数があるか否かを判断する
( '取得FTP = GETATTR #') 利用できるが、取得した機能アドレスである
()#Run関数
、他:
印刷は、( "追加のロジックを実行します" )
#結果:
真
トイレ
寝室
{「_Room__leng」100、「 _Room__width」:50}
サーバ1.1.1.1に接続する
他のロジックを実行