利用描述符自定义property
class Lazyproperty:
def __init__(self,func): #传的func函数是被描述的类中的函数属性
self.func = func
def __get__(self, instance, owner): #instance 是实例
if instance is None:
return self #当没有实例时返回自身Lazyproperty()
res = self.func(instance) #func是被描述的函数,就相当于运行area这个函数
setattr(instance,self.func.__name__,res) #将结果添加到实例字典中,但要注意,当是数据描述符时,还是从数据描述符中查找
return res class Room:
def __init__(self,name,width,length):
self.name =name
self.width = width
self.length = length @Lazyproperty #area = Lazyproperty(area) 调用描述符
def area(self):
return self.width * self.length r1 = Room("客厅",20,30)
print(Room.__dict__)
print(r1.area)
print(Room.area) #类调用静态属性时,instance实例对象是不存在的,返回时None
#property:实质实现的get,set,del
class Foo:
@property
def test(self):
print("get时运行") @test.setter #只有定义了property这个静态属性,才能设置setter
def test(self, val):
print("set时运行", val) @test.deleter
def test(self):
print("deleter时运行") def get_aaa(self):
print("get时运行")
def set_aaa(self,val):
print("set时运行",val)
def del_aaa(self):
print("del时运行") aaa = property(get_aaa,set_aaa,del_aaa) #这种等同上面的属性操作 f1 =Foo()
f1.test
f1.test="tt"
f1.aaa = "ss"
利用描述符自定义property的更多相关文章
- 利用描述符自定制property
利用描述符自定制property class Lazyproperty: def __init__(self,func): # print('==========>',func) self.fu ...
- 课时46:魔法方法:描述符(property的原理)
目录: 一.描述符(property的原理) 二.课时46课后习题及答案 ********************************** 一.描述符(property的原理) ********* ...
- Python描述符以及Property方法的实现原理
Python描述符以及Property方法的实现原理 描述符的定义: 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实了__get__(),__set__(),__delete__()中 ...
- Python描述符:property()函数的小秘密
描述符:将某种特殊类型的类的实例指派给另一个类的属性(注意:这里是类属性,而不是对象属性).而这种特殊类型的类就是实现了__get__,__set__,__delete__这三个方法中的一个或多个的新 ...
- 描述符和property内建函数
首先我们搞清楚__getattr__ ,__get__ 和 __getattribute__ 作用的不同点. __getattr__在授权中会用到. __getattribute__ 当要访问属性时 ...
- 使用描述符实现property功能
# Author : Kelvin # Date : 2019/1/25 14:46 class Decproperty: def __init__(self, func): self.func = ...
- Py-上下文管理方法,描述符的应用,错误与异常
上下文管理方法: 可以在exit里面弄一些内存清理的功能 class Open: def __init__(self,name): self.name=name def __enter__(self) ...
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...
- 11.python描述符---类的装饰器---@property
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...
随机推荐
- Jar包方式运行web项目
使用Maven进行打包 在自己的电脑终端中进入到pom.xml文件的目录中执行maven打包.命令为: mvn clean package 1 成功的标志为上面显示BUILD SUCCESS成功打包 ...
- 为什么JPA@Modifying需要@Transactional注解
在JPA开发中遇到一个很奇怪的问题,@Modifying需要和@Transactional配合使用才能正常使用.如下面代码所示 @Modifying @Transactional @Query(&qu ...
- 一致性hash算法Consistent Hashing
一致性hash算法Consistent Hashing 对于原有hash算法hash%n so... 1.话不多说直接上代码,原理或详解自行百度即可 import cn.pheker.utils.Ut ...
- java实现豆瓣回帖机器人
最近一直帮老板写爬虫,写累了就寻思着找点乐子,碰巧平时喜欢逛豆瓣,就打算写一个自动回帖机器人,废话不多说我们进入正题: 主要用到2个开源工具:Jsoup和httpclient Step 1:模拟登陆 ...
- 博客侧边栏公告html代码
前一小段是时钟: 后一段是百度统计,但是显示不出来. 网站概况 - 百度统计 https://tongji.baidu.com/web/25880379/overview/index 趋势分析 - 百 ...
- numpy库简单使用
numpy简介 NumPy(Numerical Python)是python语言的一个扩展程序库,支持大量维度数组与矩阵运算,此外,也针对数据运算提供大量的数学函数库. NumPy是高性能科学计算和数 ...
- Jackson 数据类型转换
转载自:http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024993.html Jackson处理一般的JavaBean和Json之间的转换 ...
- 编写Python脚本把sqlAlchemy对象转换成dict的教程
编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...
- Linux 下创建静态库和动态库
1.创建静态链接库 2.创建动态链接库
- date picker with jquery
<html> <input id="from_time" name="from_time"type="text" valu ...