• Python全栈之路系列之面向对象类成员特性


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

    property

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

    #!/usr/bin/env python
    # _*_coding:utf-8 _*_
    
    class Foo:
    
        @property
        def Characteristic(self):
            print("类方法的特性")
    
    # 创建一个对象
    obj = Foo()
    # 调用类方法的时候方法后面不用加括号
    obj.Characteristic
    

    输出

    类方法的特性
    
    Process finished with exit code 0
    

    setter

    设置类方法的值

    #!/usr/bin/env python
    # _*_coding:utf-8 _*_
    
    class Foo:
    
        # 获取Characteristic值
        @property
        def Characteristic(self):
            return "获取Characteristic值"
    
        # 意思是下面的Characteristic函数用来给上面的Characteristic函数设置值
        @Characteristic.setter
        def Characteristic(self, value):
            return "设置Characteristic的值"
    
    # 创建一个对象
    obj = Foo()
    
    # 获取Characteristic的值
    print(obj.Characteristic)
    
    # 设置Characteristic的值
    obj.Characteristic = 123
    

    输出

    获取Characteristic值
    
    Process finished with exit code 0
    

    deleter

    class Foo:
    
        # 特殊字段
        @property
        def pp(self):
            # 调用特殊字段的时候输出aaa
            print("property")
    
        @pp.setter
        def pp(self, value):
            # 调用设置方法的时候输出value的值
            print(value)
    
        @pp.deleter
        def pp(self):
            # 调用删除方法的时候输出del
            print("deleter")
    
    # 创建一个对象obj
    obj = Foo()
    
    # 自动执行@property
    obj.pp
    
    # 自动执行@pp.setter
    obj.pp = 999
    
    # 自动执行@pp.deleter
    del obj.pp
    

    输出

    property
    999
    deleter
    

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

    class Foo:
    
        def f1(self):
            print("f1")
    
        def f2(self, value):
            print("f2")
    
        def f3(self):
            print("f3")
    
        SpecialFields = property(fget=f1, fset=f2, fdel=f3, doc="我是注释")
    
    # 创建一个对象
    obj = Foo()
    
    # 调用类的f1方法
    obj.SpecialFields
    
    # 调用类的f2方法
    obj.SpecialFields = 123
    
    # 调用类的发方法
    del obj.SpecialFields
    
    # 调用类的doc,这里只能通过类去访问,对象无法访问
    print(Foo.SpecialFields.__doc__)
    

    输出结果

    f1
    f2
    f3
    我是注释
  • 相关阅读:
    Oracle Convert DateTime to String
    Javascript Regular Expression 日期
    AIX disk usage command
    Truncate a number to a certain number of decimal places
    Start Oracle Sqlplus with Login Information Script
    10)drf 过滤器(条件查询 排序 ) 分页器
    10.windows权限维持
    11.msf和cs补充
    12.linux提权
    4.内网信息收集(补充)
  • 原文地址:https://www.cnblogs.com/ethereala/p/9012234.html
Copyright © 2020-2023  润新知