[Pythonの学習旅] ---包装及び反射(クラス、オブジェクト指向の三つの特徴の知識:継承 - ポリモーフィズム - パッケージ)

#をカプセル化する第一層は:クラスの定義
第二の層をカプセル化する#を:内部と外部の区別、いくつかのプロパティのみが、内部的に使用することができない外部


クラス名:

__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に接続する
 他のロジックを実行























おすすめ

転載: www.cnblogs.com/chenyuxia/p/12147069.html