"""
本文仅适用于了解属性的原理,不适于属性语法的学习,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)