Python面向对象类成员特性

2018-06-08 17:26 更新


特性的存在就是将方法伪装成字段。


property

把类方法当做普通字段去调用,即用对象调用的时候后面不用加括号

  1. #!/usr/bin/env python

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

  3. class Foo:

  4.    @property

  5.    def Characteristic(self):

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

  7. # 创建一个对象

  8. obj = Foo()

  9. # 调用类方法的时候方法后面不用加括号

  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

设置类方法的值

  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函数用来给上面的Characteristic函数设置值

  9.    @Characteristic.setter

  10.    def Characteristic(self, value):

  11.        return "设置Characteristic的值"

  12. # 创建一个对象

  13. obj = Foo()

  14. # 获取Characteristic的值

  15. print(obj.Characteristic)

  16. # 设置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.        # 调用特殊字段的时候输出aaa

  6.        print("property")

  7.    @pp.setter

  8.    def pp(self, value):

  9.        # 调用设置方法的时候输出value的值

  10.        print(value)

  11.    @pp.deleter

  12.    def pp(self):

  13.        # 调用删除方法的时候输出del

  14.        print("deleter")

  15. # 创建一个对象obj

  16. obj = Foo()

  17. # 自动执行@property

  18. obj.pp

  19. # 自动执行@pp.setter

  20. obj.pp = 999

  21. # 自动执行@pp.deleter

  22. del obj.pp

输出

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

  2. property

  3. 999

  4. delete

另一种调用特殊属性的方法

  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. # 创建一个对象

  10. obj = Foo()

  11. # 调用类的f1方法

  12. obj.SpecialFields

  13. # 调用类的f2方法

  14. obj.SpecialFields = 123

  15. # 调用类的发方法

  16. del obj.SpecialFields

  17. # 调用类的doc,这里只能通过类去访问,对象无法访问

  18. print(Foo.SpecialFields.__doc__)

输出结果

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

  2. f1

  3. f2

  4. f3

  5. 我是注释


本文出自 “一盏烛光” 博客,谢绝转载!

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号