Python -- 其他知识点(属性property)

属性property

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

    #不需要自己再调用getMoney和setMoney方法,直接使用money,Python解析器就会调用getMoney或者setMoney
    #Python解析器会判断是要获取还是设置值,然后选择执行getMoney或者setMoney方法
    money = property(getMoney, setMoney)

运行结果:

In [1]: from get_set import Money
In [2]: a = Money()
In [3]: a.money
Out[3]: 0
In [4]: a.money = 100   #Python解析器会判断这个是要设置值,所以会自动调用setMoney方法
In [5]: a.money         #Python解析器会判断这个是要获取值,所以会自动调用getMoney方法
Out[5]: 100
In [6]: a.getMoney()
Out[6]: 100

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

@property 成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用:
1、将方法转换为只读。
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]: a.money
Out[4]: 0
In [5]: a.money = 100
In [6]: a.money
Out[6]: 100

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值