再学python3(十三) :python的类的私有属性和@property

# 封装和@property


# 私有属性的用法
'''
1. 隐藏属性  不被外部调用
2. 保护属性不被修改
3. 保护属性不被子类调用
'''

# class Car:
#     def __init__(self, speed, oil, time):
#         self.__speed = speed  # 私有
#         self.__oil = oil  # 私有
#         self.time = time
#     def length(self):
#         return self.__oil*self.__speed
#
# myCar = Car(20, 300, 300)
# print(myCar.length())  # 600
# # print(myCar.__speed)  # 私有的不能直接调用  报错
# print(myCar.time)  # 300


# 内置装饰器函数 @property
'''
1.将函数伪装成属性 调用时去掉小括号
2.不能传参
'''

#@property
# class Car:
#     def __init__(self, speed, oil, time):
#         self.__speed = speed  # 私有
#         self.__oil = oil  # 私有
#         self.time = time
#
#     @property
#     def length(self):
#         return self.__oil*self.__speed
#
# myCar = Car(20, 300, 300)
# print(myCar.length)  # 600



# @property 和 xxx.setter  对私有属性的修改
'''
1. 先有@property 才有xxx.setter
2.xxx 三名统一
3.xxx.setter下面的函数必须传一个且仅有一个参数
4.调用xxx.setter下面的函数用等号传递参数
'''

# class Car:
#     def __init__(self, speed, oil):
#         self.__speed = speed  # 私有
#         self.__oil = oil  # 私有
#
#     @property
#     def length(self):
#         return self.__oil*self.__speed
#
#     @length.setter
#     def length(self, new_speed):  #  修改__speed
#         self.__speed = new_speed
#
# myCar = Car(20, 300)
# print(myCar.length)  # 600
# myCar.length = 1
# print(myCar.length)  # 300



# @property 和 xxx.deleter  对私有属性的删除
'''
1. 先有@property 才有xxx.deleter
2.xxx 三名统一
3.del myCar.length  方法不能直接被删除,del时会自动调用class中的xxx.deleter下面的函数
4.xxx.deleter下面的函数中的功能,可以随意写,不仅仅是删除,而是调用这个函数,具体函数功能可以随意写
'''

class Car:
    def __init__(self, speed, oil):
        self.__speed = speed  # 私有
        self.__oil = oil  # 私有

    @property
    def length(self):
        return self.__oil*self.__speed

    @length.deleter
    def length(self):
        print('删除speed属性')
        del self.__speed

myCar = Car(20, 300)
print(myCar.length)  # 600
del myCar.length
print(myCar.length)




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值