day26静的メソッドと反射

#method方法
#property方法*****は、
静的メソッドを#staticmathod ***
#classmethodクラスメソッド****
クラスの製品:
__discount = 0.5
DEF __init __(自己、名前,.価格):
self.name名=
。自己.__価格価格=
@Property
DEF価格(セルフ):
リターン価格*製品セルフ.__ .__ディスカウント。
クラスメソッドになるために#メソッドを@classmethod、この方法は、直接任意のオブジェクトに依存することなく、クラスを呼び出すことができる
デフchange_dicount(CLS、 new_dicount):
CLS .__ディスカウント= new_dicount

アップル製品=( 'リンゴ' ,. 5)
印刷(apple.price)
Goods.change_dicount(0.5)
印刷(apple.price)
このメソッドが動作のみ静的プロパティが含まれ#、それクラスメソッドは、このメソッドを飾るために使用されるべき

#staticmethodの
クラスにログイン:
__init __ DEF(セルフ、名、パスワード):
self.name名=
self.pwdパスワード=
DEFログイン(セルフ):パスは

@staticmethod
DEF(get_usr_pwd):#静的メソッド
USR =入力( 'ユーザー名:')
PWD = INPUT (「パスワード:」)
ログイン(USR、PWD)
Login.get_usr_pwd()

関数とオブジェクトの両方が関係ないならば、それはstaticmethodで機能します。#完全なオブジェクト指向プログラミングの概要は、静的メソッドになる


#クラスのメソッドと静的メソッドは、クラスと呼ばれている
クラスのメソッドを呼び出すと、静的メソッドが行うことができます#オブジェクト?呼び出しの一般的なクラス名をお勧めすることができます
#クラスメソッドは、クラスCLSのに代わって、デフォルトのパラメータCLSを持っている
#静的メソッドだけの機能と同様に、デフォルトのパラメータはありません

#property:クラス属性として偽装方法
のみオブジェクト指向を使用して、構築された#デコレータ機能
PIインポート数学から
:クラスサークル
__init __(セルフ、R&LT)DEF:
self.r = R&LT
@Property
DEF境界(セルフ):
リターン2 * PI * self.r
@Property
DEFエリア(セルフ):
リターンself.r ** 2 * PI
。C1サークル=(5)
印刷(c1.area)
印刷(c1.perimeter)

クラスパーソン:
__init__ DEF (自己、名前、ハイ、重量):
self.name名=
self.high =ハイ
self.weight =重量
@Property
DEF BMI(自己):
戻りself.weight / 2 ** self.high

ジン人=(「金上司、1.6,90)
印刷(jin.bmi)

クラスPerson:
デフ__init __(自己、名):
自己.__名=名
@propertyの
DEF名(自己):
戻り値の自己.__名+ 'SB'
@ name.setter
DEF名(自己、NEW_NAME):
自己.__名= NEW_NAMEの

虎=人( '泰哥')
プリント(tiger.name)
tiger.name = '全班'
プリント(tiger.name)


クラスの製品:
割引= 0.5
デフ__init __(自己、名前、価格):
self.name =名前の
自己.__価格=価格
@propertyの
デフ価格(自己):
戻り値の自己.__価格* Goods.discountの
リンゴ=製品( '苹果'、5)
プリント(apple.price)

属性
#查看修改删除
クラスPerson:
デフ__init __(自己、名):
自己.__名=名
@propertyの
DEF名(自己):
返す自己.__名
@ name.deleterの
DEF名(自己):
印刷( "执行了这个方法")
デル自己。 __name
@ name.setter
デフ名(自己、NEW_NAME):
自己.__名= NEW_NAME
brother2 =人( 'ERGE')
プリント(brother2.name)
デルbrother2.nameの
印刷(brother2.name)
#classmethod
#staticmethod


#リフレクション***** 
クラスの先生:
DIC = { 'ビュー学生情報': 'show_student'、 '講師は、情報を表示する': 'show_teacher'}
DEFのshow_student(自己):
プリント( 'show_student')
DEFのshow_teacher(自己) :
印刷( 'show_teacher')
@classmethod
:DEF FUNC(CLS)
プリント( '笑')
@classmethod
DEF FUNC(CLS):
印刷( "hahahha")
アレックス=教師()
K用Teacher.dicで:
印刷(Kは)
キー=入力( "入力要件:")
を印刷(Teacher.dic [キー])
#hascttrのgetattr delattr
#IFはhasattr(教師、 'FUNC'):
#RET = GETATTR(教師、 'DIC')#教師。DIC#クラスは、オブジェクトである
#プリント(RET)
hasattr IF(アレックス、Teacher.dic [キー]):
FUNC = GETATTR(アレックス、Teacher.dic [キー])
FUNC()
によって反射#
取得オブジェクトのプロパティとメソッド共通オブジェクト名#
#は、クラス名、クラスの静的プロパティとメソッドを取得しますそして、静的メソッド

#通常の方法自己
#静的メソッド@staticmethodの
#クラスのメソッドは、@classmethod
@Property#プロパティ・メソッド

#継承
#パッケージを
クラスルーム:
__init __(自己、名前、長さ、幅)DEF:
自己.__名=名前の
自己.__長さ=長さ
自己.__幅=幅
DEFエリア(セルフ):
自己.__長さを返す*セルフ.__幅
DEF get_name(セルフ):
自己.__名前リターン
DEFのSET_NAME(セルフ、NEWNAME):
タイプ(NEWNAME)のとnewName.isdigitがSTRである()== falseの場合は
自己.__名= NEWNAME
他:
印刷( "不正な名前")
ジン=ルーム( ' jinlaoban「2,1)
を印刷(jin.area())
jin.set_name(」2「)
を印刷(jin.get_name())

私有財産の親クラスをサブクラスによって呼び出されることができないという#仮定
このプライベートを使用します##シーンの概念
プロパティを隠さ#1は、外部クラスを呼び出すにしたくない
私は、このプロパティを保護したい#2を、プロパティが自由に変更することはしたくありません
#私は財産を保護する3、サブクラスによって継承されません
Fooクラス:
__key = '123'
クラス息子(フー):
印刷(フー.__キー)

おすすめ

転載: www.cnblogs.com/Murraya/p/11209916.html