Python3基础 描述符类与自制property方法 __get__,__set__,__delete__方法 讲一个特殊的类的实例指派给另一个类的属性
2017-01-22 14:49
911 查看
镇场诗:
清心感悟智慧语,不着世间名与利。学水处下纳百川,舍尽贡高我慢意。
学有小成返哺根,愿铸一良心博客。诚心于此写经验,愿见文者得启发。
——————————————————————————————————————————
ex1:
code:
result:
ex2:
code:
result:
——————————————————————————————————————————
博文的精髓,在技术部分,更在镇场一诗。Python版本3.5,系统 Windows7。
Python是优秀的语言,值得努力学习。我是跟着小甲鱼视频教程学习的,推荐。
我是一个新手,所以如果博文的内容有可以改进的地方,甚至有错误的地方,请留下评论,我一定努力改正,争取成就一个良心博客。
注:此文仅作为科研学习,如果我无意中侵犯了您的权益,请务必及时告知,我会做出改正。
清心感悟智慧语,不着世间名与利。学水处下纳百川,舍尽贡高我慢意。
学有小成返哺根,愿铸一良心博客。诚心于此写经验,愿见文者得启发。
——————————————————————————————————————————
ex1:
code:
#描述符就是将某种特殊类型的类的实例指派给另一个类的属性 #特殊类型的要求,至少实现以下方法中的一个或者多个 #1 __get__(self,instance,owner) 用于访问属性,返回属性的值 #2 __set__(self,instance,value) 设置属性的值,不返回 #3 __delete__(self,instance) 删除操作 #这里我也没明白,只好仿照 小甲鱼老师的代码 抄一遍了 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('deleting',self,instance) class MyClass : #一个属性 x=MyDecriptor() #这个类很特殊,x是另外一个类的实例 #实例化MyClass类 test=MyClass() print(test.x) test.x=1 #赋值无效呀 print(test.x)
result:
#可以从结果中,分析到一些什么 ============== RESTART: C:\Users\Administrator\Desktop\COde.py ============== getting <__main__.MyDecriptor object at 0x00000000034F9160> <__main__.MyClass object at 0x0000000003578048> <class '__main__.MyClass'> None setting <__main__.MyDecriptor object at 0x00000000034F9160> <__main__.MyClass object at 0x0000000003578048> 1 getting <__main__.MyDecriptor object at 0x00000000034F9160> <__main__.MyClass object at 0x0000000003578048> <class '__main__.MyClass'> None >>>
ex2:
code:
#描述符就是将某种特殊类型的类的实例指派给另一个类的属性 #特殊类型的要求,至少实现以下方法中的一个或者多个 #1 __get__(self,instance,owner) 用于访问属性,返回属性的值 #2 __set__(self,instance,value) 设置属性的值,不返回 #3 __delete__(self,instance) 删除操作 class MyProperty : def __init__(self,fget=None,fset=None,fdel=None) : 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 __delete__(self,instance) : self.fdel(instance) class MyClass : def __init__(self) : self._x=None #_x表示我不想直接访问他 #用property的方法对这个属性进行操作 def getX(self) : return self._x def setX(self,value):#原先我在def前面多打了一个空格。。。就报错了。看来,使用Python要细心呀 self._x=value def delX(self): del self._x #注意参数的顺序 x=MyProperty(getX,setX,delX) #我想通过这个x对_x属性进行赋值 #有了这个模板,可以延伸出来很多其他的功能吧。
result:
============== RESTART: C:\Users\Administrator\Desktop\COde.py ============== >>> test=MyClass() >>> test.x=123 >>> test.x 123 >>> test._x #看看_x属性有没有被赋值 123 >>> del test.x >>> test._x #看看我删除了x后,_x还在吗? Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> test._x #看看我删除了x后,_x还在吗? AttributeError: 'MyClass' object has no attribute '_x' >>>
——————————————————————————————————————————
博文的精髓,在技术部分,更在镇场一诗。Python版本3.5,系统 Windows7。
Python是优秀的语言,值得努力学习。我是跟着小甲鱼视频教程学习的,推荐。
我是一个新手,所以如果博文的内容有可以改进的地方,甚至有错误的地方,请留下评论,我一定努力改正,争取成就一个良心博客。
注:此文仅作为科研学习,如果我无意中侵犯了您的权益,请务必及时告知,我会做出改正。
相关文章推荐
- python-用@property将一个方法(例如getXxx/setXxx)变成属性
- Python语言学习讲解十四:python之用纯属性取代get和set方法
- 利用反射原理用get/set方法设置属性(也可用clone,但如果有特殊处理的东西,这个好用)
- 【Python】 属性的 get 与 set 方法
- python property 与get/set方法详解
- 通过反射将一个对象的值赋给另一个对象中对应的属性 不需要用set、get
- 对于Name属性没有get/set方法引起的:target is null for setProperty(null, "x", [Ljava.lang.String;@1a48515)异常
- Python——property(使一个方法看起来就像类属性一样)
- python 7-6 如何使用描述符对实例属性做类型检查,分别实现set,方法,在set内使用isinstance做类型检查
- JS 实现对象属性的get 和set方法
- objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)
- 用Visual Studio 开发工具 如何快速批量生成属性的 get 和set 方法
- Android属性之build.prop,及property_get/property_set
- python特殊属性和方法的运用
- PHP __get()和__set()的使用方法(存取或者调用未定义的属性变量)
- 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例。
- chapter9: python 类的方法,属性,迭代器(new[old]-type class,[un]bound method,super,protocol,property,iterators)
- Android属性之build.prop,及property_get/property_set
- 对于名为cMemberId这类属性属性名与其set、get方法对应关系的差异
- Java反射实体类属性(get ,set方法)