Python-属性描叙符协议ORM实现原理依据- __set__ __get__ __delete__
class CheckString:
def __init__(self, variable_type):
self.variable_type = variable_type def __set__(self, instance, value):
print('__set__:', value)
self.value = "error:类型错误"
if self.variable_type == 'str':
self.value = value if isinstance(value, str) else "error:类型错误" def __get__(self, instance, owner):
print("__get__")
return self.value
pass def __delete__(self, instance):
pass class InfoModel:
name = CheckString(variable_type='str') if __name__ == '__main__':
info = InfoModel()
info.name = "北门吹雪"
print(info.name)
通过另外一个类来描叙类变量的属性类型,这个是ORM实现的核心基础
给属性赋值会调用 __set__方法,访问属性则会调用 __get__方法,则可以获取字段的对象和其值,删除字段时候则调用 __delete__方法
北门吹雪: https://www.cnblogs.com/2bjiujiu/
Python-属性描叙符协议ORM实现原理依据- __set__ __get__ __delete__的更多相关文章
- python __set__ __get__ __delete__
class Attr(object): def __init__(self,attrname,attrtype): self.attrname=attrname self.attrtype=attrt ...
- Python属性描述符(一)
描述符是对多个属性运用相同存取逻辑的一种方式,,是实现了特性协议的类,这个协议包括了__get__.__set__和__delete__方法.property类实现了完整的描述符协议.通常,可以只实现 ...
- 一文掌握 Python 的描述符协议
描述符介绍 描述符本质就是一个新式类,在这个新式类中,至少要实现了__get__(),__set__(),__delete__()中的一个.这也被称为描述符协议. class Myclass(obje ...
- 杂项之python描述符协议
杂项之python描述符协议 本节内容 由来 描述符协议概念 类的静态方法及类方法实现原理 类作为装饰器使用 1. 由来 闲来无事去看了看django中的内置分页方法,发现里面用到了类作为装饰器来使用 ...
- 如何正确地使用Python的属性和描述符
关于@property装饰器 在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问. 那么为什么要这样做呢?因为@property让我们将自定义的代码同变量的访问/设定联 ...
- Python中属性和描述符的简单使用
Python的描述符和属性是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题苦恼的 ...
- Descriptor - Python 描述符协议
描述符(descriptor) descriptor 是一个实现了 __get__. __set__ 和 __delete__ 特殊方法中的一个或多个的. 与 descriptor 有关的几个名词解释 ...
- Python笔记(4)类__属性与描述符
部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...
- Python属性、方法和类管理系列之----描述符类
什么是描述符类? 根据鸭子模型理论,只要具有__get__方法的类就是描述符类. 如果一个类中具有__get__和__set__两个方法,那么就是数据描述符,. 如果一个类中只有__get__方法,那 ...
随机推荐
- Java基础的基础,花1h看这一篇就够了!
------------恢复内容开始------------ Java笔记 一直以来,总想着Java会点基础就可以写后端程序了,但越到后来越发现Java基础的重要性.更不必说在面试时,Java基础 ...
- 小程序 使用Promise封装request 接口请求
//httpService.jsconst host = 'https://baidu.com/ceshi' // 接口请求的域名 // get请求使用 json对象转字符串 (formatParam ...
- linux字符串转数字
方法一: [root@ffcs211 test_dir]# echo "96.56"| awk '{print int($0)}' 输出结果 96 方法二: A="2&q ...
- 【趣味设计模式系列】之【代理模式4--ASM框架解析】
1. 简介 ASM是assemble英文的简称,中文名为汇编,官方地址https://asm.ow2.io/,下面是官方的一段英文简介: ASM is an all purpose Java byte ...
- 常用mac命令
~/.bash_profile 可以添加常用的一些命令别名alias unity="open -n /Applications/Unity/Unity.app"
- Unity中接收服务器消息并广播事件的实现
最近接触的项目,是一个棋牌游戏,棋牌游戏需要在前端进行一些操作,然后向服务器发送数据包,在服务器接收到客户端的数据后,会在服务端进行一系列的判断之后,然后发送给客户端一个返回数据,客户端接收到这个返回 ...
- Google Code Jam 2020 Round1B Join the Ranks
题意 给你一个形如\(1,2,\cdots,R,1,2,\cdots,R,1\cdots\)的序列,共重复\(C\)次.你每次可以选择一个区间\([L,R]\)将其平移到序列首部,最终使得序列具有\( ...
- Google Kick Start 2020 Round B T4 Wandering Robot
题意 一个\(n \times m\)的矩形空间,起点是\((1,1)\),终点是\((n,m)\). 假设当前位于\((x,y)\): 如果当前位于最后一行,那么下一步只能走向\((x,y+1)\) ...
- 16_Python的包package
1.包的概述 1.包是将模块一文件夹的组织形式进行分组管理的方法,一系列模块进行分类管理有利于防止命名冲突 2.包是一个包含多个模块的特色目录,目录下有一个特色的文件__init__.py 3.包的命 ...
- 兼容H5页面的js
(function (doc, win) { let docEl = doc.documentElement; let resizeEvt = 'orientationchange' in windo ...