python中property魔法方法原理_Python3 魔法方法:描述符(property的实现原理)

1、描述符

用一个类来描述另一个类的属性,而描述这个属性的类必须实现__get__ __set__ __delete__ 其中一个魔法方法,那么这个描述属性的类被称为描述符

简而言之,描述符就是将某种特殊类型(包含__get__ __set__ __delete__)的类指派给另一个类的属性

2、魔法方法

__get__(self,instance,owner)# owner 是包含描述符的类, instance 是包含描述符的类实例化的对象

用于访问属性,返回属性的值

__set__(self,instance,value)

用于属性分配操作中调用,不返回任何值

__delete__(self,instance)

定义描述符值被删除的行为,不返回值

例子:定义一个温度类,使用描述符,实现摄氏度和华氏度的任意转换

classCelsius:def __init__(self,value=26.0):

self.value=valuedef __get__(self,instance,owner):#print(self,instance,owner)

returnself.valuedef __set__(self,instance,value):

self.value=valueclassFahrenheit:def __get__(self,instance,owner):#print(instance)

return instance.cel*1.8+32

#instance时Temperature实例化的对象a,owner为Temperature这个类

def __set__(self,instance,value):

instance.cel=(value-32)/1.8

classTemperature:

cel=Celsius()

fah=Fahrenheit()

a=Temperature()

定义一个描述符Record描述符,记录指定变量读取和写入操作并保存为文件record.txt

importtimeimportosclassRecord:def __init__(self,value,name):

os.chdir(os.getcwd())

self._value=value

self._name=namedef __get__(self,instance,owner):

file=open(‘record.txt‘,‘a‘)

TIM=time.strftime("%c")

file.write(‘%s 变量于北京时间 %s 被读取, %s = %d\n‘%(self._name,TIM,self._name,self._value))

file.close()returnself._valuedef __set__(self,instance,value):

self._value=value

file=open(‘record.txt‘,‘a‘)

TIM=time.strftime("%c")

file.write(‘%s 变量于北京时间 %s 被修改, %s = %s\n‘%(self._name,TIM,self._name,self._value))

file.close()classTest:

x= Record(10,‘x‘)

y= Record(8.8,‘y‘)

test=Test()

定义一个描述符MyDes描述符,用pkl文件来存储相应属性,属性被删除时文件也被删除

importpickle as pimportosclassMyDes:

save=[]def __init__(self, name):

os.chdir(os.curdir)

self._name=namedef __get__(self,instance,owner):if self._name not inself.save:raise AttributeError("%s属性还没赋值"%self._name)else:returnself.valuedef __set__(self,instance,value):

self.save.append(self._name)

self.value=value

file=open((self._name+‘.pkl‘),‘wb‘)

p.dump(value,file)

file.close()def __delete__(self,instance):

os.remove((self._name+‘.pkl‘))

self.save.remove(self._name)classTest:

x= MyDes(‘x‘)

y= MyDes(‘y‘)

test=Test()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值