属性包装是把类的方法包装成属性,实现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