【Python】set/get方法和property

目录

 

案例(set/get):

解释:

为什么要使用 set/get 方法操作属性

如何对属性进行数据有效性控制

使用 set/get 方法的好处

property

property类

@property


案例(set/get):

       如果现在需要设计一个银行类,类中有姓名和金额,其中有几个需要注意的问题,首先要隐藏细节,不能让用户随便修改金额;如果确实要修改金额,则要提供访问访问接口(set/get方法),然后还要避免在操作类的 对象过程中的误操作,比如修改金额传入非法数据,为了保证数据的有效性,要对传入的数据进行判断。

# 银行类
class Account(object):
    # 将属性私有,不能随便访问
    def __init__(self, name, money):
        self.__name = name    # 帐户人姓名
        self.__balance = money    # 帐户余额
    
    # 帐户人姓名,在创建帐户时就已经确定,不允许修改,所以对外不提供姓名的 set 方法
    def get_name(self):
        return self.__name

    # 获取账户余额
    def get_balance(self):
        return self.__balance
    
    # 对余额进行操作和判断
    def set_balance(self,money):
        if isinstance(money, int):
            if money >= 0:
                self.__balance = money
            else:
                raise ValueError('输入的金额不正确')
        else:
            raise ValueError('输入的金额不是数字')

解释:

为什么要使用 set/get 方法操作属性

为了不想让使用者直接操作对象中的属性,要设计成私有属性,当需要对私有属性进行修改时,就要使用set/get方法

如何对属性进行数据有效性控制

在set方法中加入判断,如果传入的数据无效,提示出错

使用 set/get 方法的好处

1、隐藏实现细节,不想让使用者直接操作对象中的属性,比如金额等,

2、为需要修改的属性提供访问接口,即通过set/get接口提供精确的访问控制

3、在set方法中对传入的数据有效性进行判断,保证数据有效性

即然 set/get 方法是用来操作属性的方法,那么能不能以属性操作的方式来使用呢?在 Python 中,提供了一个叫做 property 的类,通过对这个创建这个类的对象的设置property,在使用对象的私有属性时,可以不在使用属性的函数的调用方式,而像普通的公有属性一样去使用属性,为开发提供便利。

property

property类

property类:其实是创建了一个property类的对象,用这个对象来操作属性,写法:方法名 = property(方法名),写在最后

class Account(object):
"""
还是上面的代码
不再复述
xxx
xxx
xxx

"""
# 使用 property 类来为属性设置便利的访问方式
    name = property(get_name)
    balance = property(get_balance, set_balance)



# 通过 property 类实例对象以后,在使用对象中的属性时,
# 就可以像使用普通公有属性一样来调用,但是实际调用的还是 set/get 方法。
gy = Account('丽丽', 10)
print(gy.name)
gy.balance = 9999000
print(gy.balance)

@property

@property:在装饰时,写在函数定义的上一行,而且函数定义时set/get方法不需要再加set和get,直接写方法名,举例装饰get  name时:

@property
# 这里没有写get_name,而是直接写了name
def name(self):

需要注意的是在装饰set时,使用格式为@xxx.setter ,xxx要和获取方法名(也不用写set)保持一致,如装饰设置set  money时:

@money.setter
def money(self, money):

property是类,@property是装饰器,但都是为属性提供便利的操作方式。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值