利用描述符自定义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):__ ...
随机推荐
- 图的普里姆(Prim)算法求最小生成树
关于图的最小生成树算法------普里姆算法 首先我们先初始化一张图: 设置两个数据结构来分别代表我们需要存储的数据: lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说 ...
- CentOS7--删除virbr0
https://blog.csdn.net/aienjoy/article/details/78994128
- js实现两个从input获取到的数字相加引发的问题
从input中获取到的数据是文本类型的,如果不转化类型直接相加会变成字符串的相加. 使用Number()函数可以解决这个问题,如下 var c = Number(a) + Number(b)
- centos7 ngxin启动失败:Job for nginx.service failed(80端口被占用的解决办法)
问题描述:(flaskApi) [root@67 flaskDemo]# service nginx start Redirecting to /bin/systemctl start nginx.s ...
- JWT原理和使用
jwt JSON Web Tokens,是一种开发的行业标准RFC 7519,用于安全的表示双方之间的声明.目前,jwt广泛的用在系统的用户认证方面,特别是前后端分离项目. 1.jwt认证流程 在项目 ...
- Jmeter接口测试系列之判断测试结果
在使用jmeter进行接口测试时,我们需要根据测试用例判断其测试结果是否一致,判断其执行是否成功. 在jmeter中也可以使用响应断言去判断,但是有时我们需要根据不同的用例,其判断条件不同,所以这里我 ...
- Python学习之==>常用模块
一.string模块 import string print(string.ascii_letters) # 所有大小写字母 print(string.ascii_lowercase) # 所有小写字 ...
- shell脚本批量开启防火墙端口
# 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...
- 2d平台怪物逻辑
2d来回巡逻 遇到坑会自动转向 可配置单次方向行走的时间,转向等待时间等 using System; using System.Collections; using System.Collection ...
- ascx
aspx是页面文件ascx是用户控件,用户控件必须嵌入到aspx中才能使用. ascx是用户控件,相当于模板 其实ascx你可以理解为Html里的一部分代码,只是嵌到aspx里而已,因为aspx内容多 ...