zoukankan      html  css  js  c++  java
  • 属性包装

    属性包装是把类的方法包装成属性,实现python的魔法世界。

    1. 限制属性,如类型、范围等

    2. 只读属性

    3. 不可删除属性

    4. 虚拟属性 或者说 对属性进行处理

    等关于属性的规则

    直接上代码

    class C:
        def __init__(self):
            self.__x=None
        def getx(self):
            return self.__x
        def setx(self,value):
            self.__x=value
        def delx(self):
            del self.__x
        x=property(getx,setx,delx,'')
    
    c=C()
    c.x=10
    print(c.x)      # 10

    上面 property 函数的原型为property(fget=None,fset=None,fdel=None,doc=None),根据需要定义自己的函数即可。

    上面3个方法设置了属性x的读写删

    另一种写法

    class C2(object):
        def __init__(self):
            self.__x=None
    
        @property
        def x(self):
            return self.__x
        @x.setter
        def x(self,value):
            if value>100:
                self.__x=100
            else:
                self.__x=value
        @x.deleter
        def x(self):
            del self.__x
    
    c=C2()
    c.x=10
    print(c.x)  # 10
    del c.x
    # print(c.x)
    c.x=110     # 删除属性后仍可赋值
    print(c.x)  # 100

    属性限制在100以内。

    class C2(object):
        def __init__(self):
            self.__x=None
    
        @property
        def x(self):
            return self.__x
        @x.setter
        def x(self,value):
            if value>100:
                self.__x=100
            else:
                self.__x=value
    
    c=C2()
    c.x=10
    print(c.x)  # 10
    # del c.x             # AttributeError: can't delete attribute

    没有deleter,属性就不可删除

    三种属性操作
    可读:@property
    可写:@<property-name>,setter
    可删:@<property-name>,deleter

  • 相关阅读:
    Gradle构建模块化项目
    线程池的理解与应用
    Redis理解
    kafka监听出现的问题,解决和剖析
    shiro利用过期时间,解决用户冻结踢出问题
    信息系统的运行与维护包含的主要内容
    软件维护的内容是什么
    执行顺序
    Chrome/Edge 91版本SameSite by default cookies被移除后的解决方案
    公从号编程
  • 原文地址:https://www.cnblogs.com/yanshw/p/10696567.html
Copyright © 2011-2022 走看看