属性property

来源:互联网 发布:投影仪检测软件 编辑:程序博客网 时间:2024/05/22 02:02

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:不是整型数字")

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:不是整型数字")    money = property(getMoney, setMoney)

运行结果:In [1]: from get_set import MoneyIn [2]: In [2]: a = Money()In [3]: In [3]: a.moneyOut[3]: 0In [4]: a.money = 100In [5]: a.moneyOut[5]: 100In [6]: a.getMoney()Out[6]: 100

3. 使用property取代getter和setter方法

@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用

  • 将方法转换为只读
  • 重新实现一个属性的设置和读取方法,可做边界判定
class Money(object):    def __init__(self):        self.__money = 0    @property    def money(self):        return self.__money    @money.setter    def money(self, value):        if isinstance(value, int):            self.__money = value        else:            print("error:不是整型数字")运行结果In [3]: a = Money()In [4]: In [4]: In [4]: a.moneyOut[4]: 0In [5]: a.money = 100In [6]: a.moneyOut[6]: 100