python属性(原理学习)

"""

        本文仅适用于了解属性的原理,不适于属性语法的学习,python中属性有更简洁的语法

"""

1.属性:

        目的:保护类中数据在有效范围内

2.案例

(1)原理

        设置空调的温度为(0-25度)

class AirConditioning:
    def __init__(self,temperature):
        self.__temperature = temperature #设置为私有变量,防止类外修改
    def set_temperature(self,value):
        if value > 27:
            value = 27
        elif value < 18:
            value = 18
        self.__temperature = value
    def get_temperature(self):
        return self.__temperature
airC = AirConditioning(100) #调用构造函数直接将100给了私有变量,数值没有被限制
print(airC.get_temperature())
airC.set_temperature(100) #超过27上限,设置为27
print(airC.get_temperature())
airC.set_temperature(-5) #超过18下限,设置为18
print(airC.get_temperature())

可以看到airC = AirConditioning(100),数值并未被限制,所以构造函数代码改为

def __init__(self,temperature):
    self.set_temperature(temperature)

可以看到此时调用构造函数时,数值被限制

以上代码为属性原理的阐释

(2)以上代码缺陷及改进

缺陷:不能直观地看出构造函数中有几个实例变量,比如__temperature藏到了set_temperature函数中

改进:构造函数保持python的风格,temperature = property(get_temperature, set_temperature)用于建立实例变量与读写方法之间的联系

"""
设置空调的温度为(18-27度)
"""


class AirConditioning:
    def __init__(self, temperature=0):
        self.temperature = temperature  # 相当于self.set_temperature(temperature)

    def set_temperature(self, value):
        if value > 27:
            value = 27
        elif value < 18:
            value = 18
        self.__temperature = value #这里必须是私有变量,否则导致递归错误

    def get_temperature(self):
        return self.__temperature

    temperature = property(get_temperature, set_temperature)


airC = AirConditioning()
print(airC.temperature)  # 调用get_temperature函数
airC.temperature = 200  # 调用set_temperature函数
print(airC.temperature)

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值