函数的属性私有

在编写类中经常遇到那种写一个函数,然后返回一个值的情况,然而我们需要得到那个值需要通过类对象调用该方法来实现。如:

class Money(object):
    def __init__(self):
        self.__money = 100

    def money(self):
        return self.__money

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

获取money值:

m = Money()
money = m.money()

是不是很麻烦?如果我们能够直接可以通过某个属性就能获得应该会方便许多,那么怎么做呢?
可以这样定义这个类:

class Money(object):
    def __init__(self):
        self.__money = 100

    @property
    def money(self):
        return self.__money

    def set_money(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")
这个时候,就可以通过访问money属性获得其值了:
m= Money()
money = m.money

那么问题来了,如果我想把money的数量更改呢?能不能也通过这种属性赋值的方式实现?而不是调用set_money方法。答案是可以的。再次重新定义类:

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

此时可以通过类属性来进行更改money值了。

In [4]: a = Money()
In [5]: a.money = 10

In [6]: a.money
Out[6]: 10

Conclusion:

@property成为属性函数,可以对属性赋值时做必要的检查
@money.setter可以对属性函数进行相应的写操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值