class Type:
def __init__(self, key, expect_type):
self.key = key
self.expect_type = expect_type def __get__(self, instance, owner):
print('执行get方法')
return instance.__dict__[self.key] def __set__(self, instance, value):
print('执行set方法')
if not isinstance(value, self.expect_type):
raise TypeError('你传入的不是',self.expect_type) instance.__dict__[self.key]=value def __delete__(self, instance):
print('执行delete方法')
instance.__dict__.pop(self.key) class People:
name = Type('name', str)
age = Type('age', int) def __init__(self, name, age):
self.name = name
self.age = age p = People('alex', 11)
print(p.name)
class Type:
def __init__(self, key, expect_type):
self.key = key
self.expect_type = expect_type def __get__(self, instance, owner):
print('执行get方法')
return instance.__dict__[self.key] def __set__(self, instance, value):
print('执行set方法')
if not isinstance(value, self.expect_type):
raise TypeError('你传入的不是',self.expect_type) instance.__dict__[self.key]=value def __delete__(self, instance):
print('执行delete方法')
instance.__dict__.pop(self.key) def deco(**kwargs): # kwargs = {'name':str, 'age': int}
def wrapper(obj): # obj = People
print('--->',kwargs)
print('类名',obj)
for key, val in kwargs.items(): # ('name',str),('age',int) setattr(obj, key, Type(key, val))
return obj
print(kwargs)
return wrapper @deco(name=str, age=int) # @wrapper ==> People= wrapper(People)
class People:
def __init__(self, name, age):
self.name = name
self.age = age p = People('alex', 11) print(p.__dict__)

python描述符的更多相关文章

  1. 杂项之python描述符协议

    杂项之python描述符协议 本节内容 由来 描述符协议概念 类的静态方法及类方法实现原理 类作为装饰器使用 1. 由来 闲来无事去看了看django中的内置分页方法,发现里面用到了类作为装饰器来使用 ...

  2. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

     1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...

  3. 【转载】Python 描述符简介

    来源:Alex Starostin 链接:www.ibm.com/developerworks/cn/opensource/os-pythondescriptors/ 关于Python@修饰符的文章可 ...

  4. python描述符descriptor(一)

    Python 描述符是一种创建托管属性的方法.每当一个属性被查询时,一个动作就会发生.这个动作默认是get,set或者delete.不过,有时候某个应用可能会有 更多的需求,需要你设计一些更复杂的动作 ...

  5. python描述符 descriptor

    descriptor 在python中,如果一个新式类定义了__get__, __set__, __delete__方法中的一个或者多个,那么称之为descriptor.descriptor通常用来改 ...

  6. Python描述符的使用

    Python描述符的使用 前言 作为一位python的使用者,你可能使用python有一段时间了,但是对于python中的描述符却未必使用过,接下来是对描述符使用的介绍 场景介绍 为了引入描述符的使用 ...

  7. Python描述符 (descriptor) 详解

    1.什么是描述符? python描述符是一个“绑定行为”的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有 __get__(), __set__(), 和__delete__().如 ...

  8. python描述符和属性查找

    python描述符 定义 一般说来,描述符是一种访问对象属性时候的绑定行为,如果这个对象属性定义了__get__(),__set__(), and __delete__()一种或者几种,那么就称之为描 ...

  9. Iterator Protocol - Python 描述符协议

    Iterator Protocol - Python 描述符协议 先看几个有关概念, iterator 迭代器, 一个实现了无参数的 __next__ 方法, 并返回 '序列'中下一个元素,在没有更多 ...

  10. Python描述符以及Property方法的实现原理

    Python描述符以及Property方法的实现原理 描述符的定义: 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实了__get__(),__set__(),__delete__()中 ...

随机推荐

  1. ABC卡

    如今在银行,P2P等各种贷款业务机构,普遍使用信用评分,对客户实行打分制,以期对客户有一个优质与否的评判.但是不是所有人都知道信用评分卡还分A,B,C卡三类!所以,如果你只知道ABC是Gary的ABC ...

  2. 使用python实现测试工具(一)

    本系列教程我们将使用python实现一些简单的测试工具,为了尽可能的简单,我们的工具以命令行工具为主. 本系列教程使用的python版本是3.6.3. 背景 这一节我们实现简单的命令行发送get请求的 ...

  3. WebViewJavascriptBridge 进行js 与native通信。

    1,  iOS端加载web页面.开启日志并给webView建立JS与OC的桥梁 - (void)viewWillAppear:(BOOL)animated { if (_bridge) { retur ...

  4. “The subscription does not exist” when a distributor primary replica fails over to a replica that does not use the same agent profile

    Symptoms Consider the following scenario: In Microsoft SQL Server 2017, you have a distribution agen ...

  5. HTML5学习笔记(二十九):Cookie和Session

    HTTP协议本身是无状态的,这和HTTP最初的设计是相符的,每次请求都是创建一个短连接,发送请求,得到数据后就关闭连接.即每次连接都是独立的一次连接. 这样的话,导致的问题就是当我在一个页面登陆了账号 ...

  6. C#中准确跟踪错误异常所在的文件位置方法

    准确跟踪错误异常所在的文件位置方法是在发布改文件所在的DLL时候,把对应的pdb文件也一同发布. pdb文件是:PDB全称Program Database,不知道中文翻译叫什么.相信使用过VS的人对于 ...

  7. npm安装package.json中的模块依赖

    npm 一键安装 package.json里的依赖时有2种情况: 1.package.json不存在时 运行命令: npm init可自动创建package.json文件 2.package.json ...

  8. mtr命令详解诊断网络路由

    首先安装mtr​# yum -y install mtr ​ ​一般在windows 来判断网络连通性用ping 和tracert, ping的话可以来判断丢包率,tracert可以用来跟踪路由, 在 ...

  9. js 对象转&拼接

    function pars(param, key, encode) { if (param == null) return ''; var arr = []; var t = typeof (para ...

  10. [干货教程]仿网易云课堂微信小程序开发实战经验

    本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...