【python】面向對象編程之@property、@setter、@getter、@deleter用法


 

@property裝飾器作用:把一個方法變成屬性調用

使用@property可以實現將類方法轉換為只讀屬性,同時可以自定義setter、getter、deleter方法

 

@property&@.setter

class Person(object):
    
    @property
    def birth(self):
        return self._birth

    @birth.setter
    def birth(self,value):
        self._birth=value

if __name__ == '__main__':
    p=Person()
    p.birth=1985
    print(p.birth)

---------------運行結果-----------------
1985

  

把方法變成屬性,只需要在方法前添加@property裝飾器即可。

繼續添加一個裝飾器@birth.setter,給屬性賦值

 

@.getter

上例中因為在birth方法中返回了birth值,所以即使不調用getter方法也可以獲得屬性值。接下來再將函數稍作修改,看下getter方法是怎么使用的。

class Person(object):
    
    @property
    def birth(self):
        return 'my birthday is a secret!'

    @birth.setter
    def birth(self,value):
        self._birth=value

if __name__ == '__main__':
    p=Person()
    p.birth=1985
    print(p.birth)

------------------運行結果------------------
my birthday is a secret!

  

因為將birth方法的返回值寫了固定值,所以即使賦值成功,但是並不會打印。

如果想打印出具體的值,可以增加getter方法。

class Person(object):
    
    @property
    def birth(self):
        return self._birth

    @birth.setter
    def birth(self,value):
        self._birth=value

    @birth.getter
    def birth(self):
        return self._birth

if __name__ == '__main__':
    p=Person()
    p.birth=1985
    print(p.birth)

------------------運行結果-------------------
1985

 

@.deleter

@property含有一個刪除屬性的方法

class Person(object):
    
    @property
    def birth(self):
        return self._birth

    @birth.setter
    def birth(self,value):
        self._birth=value

    @birth.getter
    def birth(self):
        return self._birth
    
    @birth.deleter
    def birth(self):
        del self._birth

if __name__ == '__main__':
    p=Person()
    p.birth=1985
    print(p.birth)
    del p.birth
    print(p.birth)


---------------運行結果-----------------
1985

#刪除birth屬性后,再次訪問會報錯
AttributeError: 'Person' object has no attribute '_birth'    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM