1. 程式人生 > >python property的使用

python property的使用

經常在python程式裡看到,@property 這個東西,到底用來做什麼的。主要就是用來把方法變成屬性呼叫,也就是是更pythonic。

將一個方法變為只讀物件

class Test(object):

    def __init__(self, para):
        self.para = para

    @property
    def only_para(self):
        return 'para:%s'% self.para


cc = Test("hello, world!")
print cc.only_para
cc.only_para = 'try'  # 這一步會報錯

Traceback (most recent call last):
  File "proper.py", line 21, in <module>
    cc.only_para = 'try'
AttributeError: can't set attribute
當加了property這個裝飾器後,only_para變成了一個只讀的屬性gettattr,先在再給他加一個setattr屬性
class Test(object):

    def __init__(self, para):
        self.para = para

    @property
    def normal_para(self):
        return 'para:%s'% self.para

    @normal_para.setter
    def normal_para(self, value):
        if isinstance(value, str):
            self.para = "string"
        elif isinstance(value, int):
            self.para = 10


cc = Test("hello, world!")
print cc.normal_para
cc.normal_para = 100 
print cc.normal_para

# output
para:hello, world!
para:10

可以看到屬性設定成功,normal_para引數已經改變。

總結一下就是,property這個裝飾器就如同名字一樣,講過方法轉為屬性。在設計程式碼時靈活運用這個裝飾器可以讓程式碼更pythonic