Python中property属性的应用及Demo


property的应用

在python如果希望类属性无法更改或者访问可以使用私有属性__变量名声明是私有属性,而python没有严格意义上的私有属性,那么如果要在外部访问属性或者可以修改某个属性但又不希望是随意的更改应该怎么做呢?这个时候property属性就可以用上了,下面请看Demo。

  • 1.原始的getter和setter方法,获取私有属性值
class Money(object):
    def __init__(self):
        self._money = 0

    def getmoney(self):
        return self._money

    def setmoney(self, value):
        if isinstance(value, int):
            self._money = value
        else:
            print("error:不是整型数字")


    money = Money()
    print("====获取钱的大小值====")
    print(money.getmoney())
    # 结果是:0
    print("====修改钱的大小值====")
    money.setmoney(100)
    print(money.getmoney())
    # 结果是:100
  • 2.使用property升级getter和setter方法
# 定义一个钱的类
class Money(object):
    def __init__(self):
        self._money = 0

    def getmoney(self):
        return self._money

    def setmoney(self, value):
        if isinstance(value, int):
            self._money = value
        else:
            print("error:不是整型数字")
    #property一共有四个参数,第一个参数获取 第二个参数设置,后面两个参数不常用,这里不表
    money = property(getmoney, setmoney)

money = Money()
print(money.getmoney())
# 结果是:0
print("====修改钱的大小值====")
money.setmoney(100)
print(money.getmoney())
# 结果是:100

#最后特别需要注意一点:实际钱的值是存在私有便令__money中。而属性money是一个property对象,是用来为这个私有变量__money提供接口的。

#如果二者的名字相同,那么就会出现递归调用,最终报错。
  • 3.使用property取代getter和setter
# 定义一个钱的类
class Money(object):
    def __init__(self):
        self._money = 0

    @property
    # 注意使用@property装饰器对money函数进行装饰,就会自动生成一个money属性,当调用获取money的值时,就调用该函数
    def money(self):
        return self._money

    @money.setter
    # 使用生成的money属性,调用@money.setter装饰器,设置money的值
    def money(self, value):
        if isinstance(value, int):
            self._money = value
        else:
            print("error:不是整型数字")

aa = Money()
print("====获取钱的大小值====")
print(aa.money)
# 结果是:0
print("====修改钱的大小值====")
aa.money = 100
print(aa.money)
# 结果是:100

声明:游延东的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Python中property属性的应用及Demo


为你,千千万万遍。