python动态方法_python中的动态方法生成
这是一个元类,它将__getattr__函数从类定义添加回元类本身。这就避免了在多个地方定义函数,或者作为预先定义并单独添加到元类和类中的单独全局函数来定义。在class Meta(type):
def __new__(mcls, name, bases, dikt):
fgetattr = dikt.get('__getattr__')
if fgetattr is not None:
setattr(mcls, '__getattr__', fgetattr)
return super(Meta, mcls).__new__(mcls, name, bases, dikt)
class Generator(object):
__metaclass__ = Meta
def __getattr__(obj, name):
def f(self):
return "Result of %s for %r" % (name, self)
f.__name__ = name
if isinstance(obj, type):
setattr(obj, name, f)
else:
setattr(type(obj), name, f)
return getattr(obj, name)
与其通过动态函数的__get__描述符方法直接创建方法,不如将函数存储在dict类中,并依赖getattr返回正确的绑定/未绑定方法。随后的属性访问将使用类中的函数。由于类和实例都使用相同的__getattr__函数,因此需要进行isinstance检查,以确保将动态函数存储到类而不是实例中。在
在Python3中,将函数作为类的属性只返回函数,因为未绑定的方法已从语言中移除。另外,metaclass syntax已更改为类定义行中的关键字参数。在
测试:
^{pr2}$
python动态方法_python中的动态方法生成相关推荐
- python find的使用方法_Python中的rfind()方法使用详解
Python中的rfind()方法使用详解 rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[beg:end]. 语法 以 ...
- python ctime函数_Python中的ctime()方法使用教程
ctime()方法转换,因为历元到表示本地时间的字符串表示以秒为单位的时间.如果不设置秒时或None,所返回的时间的当前time()被使用.使用asctime(localtime(secs)).不使用 ...
- python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些
Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些 发布时间:2020-11-05 17:11:48 来源:亿速云 阅读:95 作者:Leah 本篇文章给大家分享的是有关P ...
- python函数实例化_Python中的__new__()方法与实例化
__new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__()负责将类的实例化,而在__init__()启动之前 ...
- python new方法_Python中的__new__()方法的使用
__new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known case ...
- python绝对值编程_python中取绝对值简单方法总结
python如何使用绝对值?下面给大家介绍三种求绝对值的方法: import math def abs_value1(): a = float(input('1.请输入一个数字:')) if a &g ...
- python求绝对值_python中取绝对值简单方法总结
python如何使用绝对值?下面给大家介绍三种求绝对值的方法: import math def abs_value1(): a = float(input('1.请输入一个数字:')) if a &g ...
- python加绝对值_python中取绝对值简单方法总结
python如何使用绝对值?下面给大家介绍三种求绝对值的方法: import math def abs_value1(): a = float(input('1.请输入一个数字:')) if a &g ...
- python3.7 的pygame安装方法_Python中pygame安装方法图文详解
本文实例讲述了Python中pygame安装方法.分享给大家供大家参考,具体如下: 这里主要描述一下我们怎样来安装pygame 可能很多人像我一样,发现了pygame是个好东东,但是就是不知道怎样使用 ...
最新文章
- 【声入人心:音频新体验】
- JAVA复习(对象的克隆、正则表达式)
- 【原】Python基础-函数
- 实现 OutOfMemory​
- 基本算法研究1-冒泡排序算法测试
- 牛客网--牛牛的闹钟
- 格密码教程(六):高斯二维格规约,解决SVP问题
- python+Django框架运用(一)
- Excel中 插入 对号等特殊字符
- mysql5.5创建学生情况表_数据库中创建一个学生表
- incaseformat病毒专杀:怎么查杀incaseformat病毒?紧急扩散!
- 《三体》读后思考-泰勒展开/维度打击/黑暗森林
- Cadence Allegro如何设置差分对
- 动态规划--背包计数--hdu2079选课时间
- 零基础如何学习SEO网站优化
- OCR应用:名片识别
- sfc /scannow是什么意思,有什么作用?(转载)
- Creo 3D转2D 尺寸问题
- 为什么前端拿到的数据和PostMan拿到的数据不一样
- 一个“不真实”的世界
热门文章
- html input 上标,javascript – 文本类型的输入字段中的上标
- dict下如何取值_年薪百万之路--第十七天 装饰器(下)和迭代器
- 传统的6d位姿估计fangfa1_李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪...
- nginx 的 rewrite 模块
- Problem D: 编程题B-向量的数量积
- PACKING【二维01背包】
- 迭代器模式(Iterator)
- 转向Kotlin——数据类和封闭类
- MyBatis-进阶2
- MySQL grant 权限,分别可以作用在多个层次上