描述符就是将某种特殊类型的类的实例指派给另一个类的属性

例如下面的示例

class MyDecriptor():

def get(self,instance,owner):

print("getting...",self,instance,owner)

def __set__(self,instance,value):
print("setting...",self,instance,value) def __delete__(self,instance):
print("delete...",self,instance)

class Test():

x = MyDecriptor()//就是把MyDecriptor的实例指派给了Test类的属性x

porperty 的原理

class MyPorperty():

def init(self,fget,fset,fdel):#fget,fset,fdel都是函数

self.fget = fget

self.fset = fset

self.fdel = fdel

def __get__(self,instance,owner):
return self.fget(instance) def __set__(self,instance,value):
self.fset(instance,value) def __deleted__(self,instance):
self.fdel(instance)

class C():

def init(self):

self._x = None

def getX(self):

return self._x

def setX(self,value):

self._x = value

def delX(self):

del self._x

    x = MyPorperty(getX,setX,delX)//getX对应的函数是fget,setX对应的函数是fset,delX对应的函是fdel

例子 摄氏温度和华氏温度的转变

class Celsius():

def init(self,value = 26.0):

self.value = float(value)

def __get__(self,instance,owner):
return self.value def __set__(self,instance,value):
self.value = float(value)

class Fahrenheit():

def get(self,instance,owner):#摄氏度转换成华氏度

return instance.cel * 1.8 + 32

def __set__(self,instance,value):#华氏度转换成摄氏度
instance.cel = (float(value) - 32) / 1.8

class Temperature():

cel = Celsius()

fah = Fahrenheit()

最新文章

  1. C#获得网络连接信息 IPGlobalProperties
  2. 全栈开发必备的10款 Sublime Text 插件
  3. 八、Linux下的网络服务器模型
  4. HDU 5268 ZYB loves Score (简单模拟,水)
  5. 如何用C++语言编程(How to program in C++)
  6. $.cookie is not a function
  7. JavaWeb学习—Servlet
  8. route-over VS mesh-under
  9. 核心C#
  10. C# API 大全
  11. Top 10 JavaScript编辑器,你在用哪个?
  12. jQuery选择器(表单元素过滤选择器)第八节
  13. 为label或者textView添加placeHolder
  14. Scala Option类型
  15. SQL SERVER数据库修改是否区分大小写(转载)
  16. weblogic获取应用目录路径(war包)
  17. 吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人!
  18. mysql排序索引优化
  19. tomcat配置文件context.xml和server.xml分析
  20. easyui的select使用

热门文章

  1. Springboot项目关闭Httpclient的Debug日志
  2. pe头
  3. springboot的@Configuration文件读取static静态文件
  4. xgboost 特征重要性计算
  5. codeforces#1108E2. Array and Segments (线段树+扫描线)
  6. 在docker容器中python3.5环境下使用DIGITS训练caffe模型
  7. JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
  8. Spring AOP潜入易懂的讲解
  9. Leetcode题目155.最小栈(简单)
  10. 第二届强网杯部分题writeup