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

  • 相关阅读:
    设置Tomcat根目录
    使用Servlet Filter做Login checking
    Javac命令一次编译一个目录下的所有java文件
    Java ArrayList操作
    Java 读Properties
    Java文件读写
    Servlet Listener
    Servlet连接数据库
    Servlet Filter 3
    Servlet Filter 2
  • 原文地址:https://www.cnblogs.com/yanshw/p/10696567.html
Copyright © 2011-2022 走看看