「効果的なPythonの」ノート - 章4元クラスとプロパティ

属性のgetおよびsetメソッドで置換A、

以下のように従来のgetおよびsetメソッドは、次のとおりです。

クラスOldResistor():
     デフ __init__ (自己、オーム):
        セルフ。__ohms = オーム

    デフget_ohms(自己):
         戻り値の自己。__ohms 

    デフset_ohms(自己、オーム):
        セルフ。__ohms = オーム


なら __name__ == ' __main__ ' 
    R0 = OldResistor(50e3 プリント(r0.get_ohms())
    r0.set_ohms( 10E3 プリント(r0.get_ohms())

@propertyデコレータゲッターとセッターメソッドの仕事

クラス抵抗():
     DEF  __init__ (セルフ、オーム):
        self.ohms = オーム
        self.voltage = 0 
        self.current = 0 


クラスVolResistor(抵抗):
     DEF  __init__ (セルフ、オーム):
        スーパー()__init__(オーム)   #は、親クラスの変数を継承 
        セルフ。__vol = 100個の   最初__変数内部変数が外側で参照することができないよう

    @Propertyの    ゲッターセット電圧特性の
    DEFの電圧(セルフ):
         リターン。自己__vol

    @ voltage.setter 
    DEF :電圧(自己、電圧)
        セルフ。__vol = 電圧
        self.current =セルフ。__vol / self.ohms 


IF  __name__ == ' __main__ ' 
    R1 =抵抗(50e3 
    r1.ohms = 10E3   パブリックプロパティ 
    = 5E3 + r1.ohms プリント(r1.ohms)
    R2 = VolResistor(10 印刷(r2.voltage)   ゲッター性、電圧セッターメソッドを実行しない、属性は現在更新されていない印刷
    

    (r2.current)を
    r2.voltage= 100     とき電圧特性割当て、電圧セッターメソッドが実行され、更新現在のプロパティ
    プリント(r2.current)

 

第二に、代わりに@property性質が再構築を検討

パス

第三には、記述子は@propertyを取る方法を書き換える必要です

__get__ 
__set__

四、__ __ GETATTR、__ __のgetAttribute、__ SETATTR _需要創出のプロパティ

パス

五、元类

__新しい__

パス

おすすめ

転載: www.cnblogs.com/maxgongzuo/p/12002701.html