Python面向?qū)ο箢惓蓡T特性

2018-06-08 17:26 更新


特性的存在就是將方法偽裝成字段。


property

把類方法當(dāng)做普通字段去調(diào)用,即用對(duì)象調(diào)用的時(shí)候后面不用加括號(hào)

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    @property

  5.    def Characteristic(self):

  6.        print("類方法的特性")

  7. # 創(chuàng)建一個(gè)對(duì)象

  8. obj = Foo()

  9. # 調(diào)用類方法的時(shí)候方法后面不用加括號(hào)

  10. obj.Characteristic

輸出

  1. /usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. 類方法的特性

  3. Process finished with exit code 0

setter

設(shè)置類方法的值

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 獲取Characteristic值

  5.    @property

  6.    def Characteristic(self):

  7.        return "獲取Characteristic值"

  8.    # 意思是下面的Characteristic函數(shù)用來給上面的Characteristic函數(shù)設(shè)置值

  9.    @Characteristic.setter

  10.    def Characteristic(self, value):

  11.        return "設(shè)置Characteristic的值"

  12. # 創(chuàng)建一個(gè)對(duì)象

  13. obj = Foo()

  14. # 獲取Characteristic的值

  15. print(obj.Characteristic)

  16. # 設(shè)置Characteristic的值

  17. obj.Characteristic = 123

輸出

  1. /usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. 獲取Characteristic

  3. Process finished with exit code 0

deleter


  1. class Foo:

  2.    # 特殊字段

  3.    @property

  4.    def pp(self):

  5.        # 調(diào)用特殊字段的時(shí)候輸出aaa

  6.        print("property")

  7.    @pp.setter

  8.    def pp(self, value):

  9.        # 調(diào)用設(shè)置方法的時(shí)候輸出value的值

  10.        print(value)

  11.    @pp.deleter

  12.    def pp(self):

  13.        # 調(diào)用刪除方法的時(shí)候輸出del

  14.        print("deleter")

  15. # 創(chuàng)建一個(gè)對(duì)象obj

  16. obj = Foo()

  17. # 自動(dòng)執(zhí)行@property

  18. obj.pp

  19. # 自動(dòng)執(zhí)行@pp.setter

  20. obj.pp = 999

  21. # 自動(dòng)執(zhí)行@pp.deleter

  22. del obj.pp

輸出

  1. yangwen@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week07/s1.py

  2. property

  3. 999

  4. delete

另一種調(diào)用特殊屬性的方法

  1. class Foo:

  2.    def f1(self):

  3.        print("f1")

  4.    def f2(self, value):

  5.        print("f2")

  6.    def f3(self):

  7.        print("f3")

  8.    SpecialFields = property(fget=f1, fset=f2, fdel=f3, doc="我是注釋")

  9. # 創(chuàng)建一個(gè)對(duì)象

  10. obj = Foo()

  11. # 調(diào)用類的f1方法

  12. obj.SpecialFields

  13. # 調(diào)用類的f2方法

  14. obj.SpecialFields = 123

  15. # 調(diào)用類的發(fā)方法

  16. del obj.SpecialFields

  17. # 調(diào)用類的doc,這里只能通過類去訪問,對(duì)象無法訪問

  18. print(Foo.SpecialFields.__doc__)

輸出結(jié)果

  1. yangwen@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week07/s1.py

  2. f1

  3. f2

  4. f3

  5. 我是注釋


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)