Python中proprety的使用技巧


写在前面,python中proprety在python中大量使用,尤其是在一些框架和网络大牛写的代码中,非常常见,所有学习proprety就非常必要了,废话不多说,直接上代码:

一.使用定义实例属性来使用

# 定义实例方法的方法来使用
class Test(object):
    # 可以定义参数
    def __init__(self, name="liming"):
        self.__age = 18
        if name == "liming":
            self.name = "liming"
        else:
            self.name = name

    def getage(self):
        print("获取属性的时候调用")
        if self.name == 'likang':
            return self.__age
        else:
            print("%s这个用户不能访问当前的这个属性" % self.name)

    def setage(self, value):
        if self.name == 'lili':
            self.__age = value
        else:
            print("无权进行修改")

    def delage(self):
        del self.__age
        print("删除属性的时候调用")

    age = property(getage, setage, delage)


if __name__ == '__main__':
    test = Test()
    test.age = 20

输出:

无权进行修改

第一种用法,定义实例方法,然后创建proprety的实例对象,注意:在定义三个方法的时候,setxxx,getxxx,delxxx中的”xxx”必须保持一致.proprety主要的是用来当一个对象要操作比较敏感属性的时候,可以对属性进行保护和对数据进行筛选,以免出现不期待的结果发生.

二.使用装饰器的方法来使用:

class Test(object):
    def __init__(self, name='liming'):
        self.__age = 18
        if name == 'liming':
            self.name = 'liming'
        else:
            self.name = name

    @property
    def age(self):
        if self.name == "liming":
            return self.__age
        else:
            print("%s无权访问该属性")

    @age.setter
    def age(self, value):
        if self.name == "lili":
            self.__age = value
        else:
            print("无权修改该属性")

    @age.deleter
    def age(self):
        del self.__age


test = Test()
test.age = 20

输出:

无权修改该属性
总结:使用proprety方法,可以保证数据被正确的访问和赋值,在访问数据的时候,可以对用户进行权限相关的验证等,从而保证了数据的稳定性.
最后,贴出proprety的部分源码:
  property(fget=None, fset=None, fdel=None, doc=None) -> property attribute

        fget is a function to be used for getting an attribute value, and likewise
        fset is a function for setting, and fdel a function for del'ing, an
        attribute.  Typical use is to define a managed attribute x:

        class C(object):
            def getx(self): return self._x
            def setx(self, value): self._x = value
            def delx(self): del self._x
            x = property(getx, setx, delx, "I'm the 'x' property.")

        Decorators make defining new properties or modifying existing ones easy:

        class C(object):
            @property
            def x(self):
                "I am the 'x' property."
                return self._x
            @x.setter
            def x(self, value):
                self._x = value
            @x.deleter
            def x(self):
                del self._x

        # (copied from class doc)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值