python-property的使用

property的使用

定义一个方法来设置和访问该属性,如下面代码所示,即使赋值为字符串也不会报错,它会直接访问属性,倒是代码的不安全。
这是因为我们把方法看作对象的接口,直接访问对象的属性是不安全的,或设计上不够灵活,但是使用调用方法在形式上不如直接访问属性简洁,但胜在安全。

"""
A.get_age()  # 访问器
A.set_age()  # 设置器

通过
A.age  访问
A.age = 20 设置

定义类AgeDemo
通过访问器访问年龄
通过设置器设置年龄
年龄不是int类型则主动抛出异常

"""

# class AgeDemo:
#     def __init__(self,age):
#         self.age = age
#
#     # 访问
#     def get_age(self):
#         return self.age
#
#     # 设置
#     def set_age(self,age):
#         if not isinstance(age, int):
#             raise TypeError("TypeError")
#
#         self.age = age
#
# a = AgeDemo(18)
# a.age = "20"  # 直接访问属性
# print(a.age)  #  20 str 直接访问属性 不安全

使用property可以触发错误,无法直接访问属性,先进入判断,不是int形式,就会报错。

# 当赋值的时候 直接触发set_age()方法
# class AgeDemo:
#     def __init__(self,age):
#         self.age = age
#
#     # 访问
#     def get_age(self):
#         return self.age
#
#     # 设置
#     def set_age(self,age):
#         if not isinstance(age, int):
#             raise TypeError("TypeError")
#         self.age = age
#
#     age_pro = property(fget= get_age, fset= set_age)
#
# a = AgeDemo(18)
# a.age_pro = 20   # 赋值 --fset
# print(a.age_pro)  # 访问 --fget  20
#
# a.age_pro = "22"  #  raise TypeError("TypeError")
# print(a.age_pro)

它还有另外一种使用方式:

class AgeDemo:
    def __init__(self,age):
        self.age = age

    @property
    def age_test(self):
        return self.age

    @age_test.setter
    def age_test(self, age):
        if not isinstance(age, int):
            raise TypeError("TypeError")
        self.age = age

a = AgeDemo(18)
a.age_test = 20
print(a.age_test)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值