这是一个元类,它将__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中的动态方法生成相关推荐

  1. python find的使用方法_Python中的rfind()方法使用详解

    Python中的rfind()方法使用详解 rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[beg:end]. 语法 以 ...

  2. python ctime函数_Python中的ctime()方法使用教程

    ctime()方法转换,因为历元到表示本地时间的字符串表示以秒为单位的时间.如果不设置秒时或None,所返回的时间的当前time()被使用.使用asctime(localtime(secs)).不使用 ...

  3. python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些

    Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些 发布时间:2020-11-05 17:11:48 来源:亿速云 阅读:95 作者:Leah 本篇文章给大家分享的是有关P ...

  4. python函数实例化_Python中的__new__()方法与实例化

    __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__()负责将类的实例化,而在__init__()启动之前 ...

  5. python new方法_Python中的__new__()方法的使用

    __new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known case ...

  6. python绝对值编程_python中取绝对值简单方法总结

    python如何使用绝对值?下面给大家介绍三种求绝对值的方法: import math def abs_value1(): a = float(input('1.请输入一个数字:')) if a &g ...

  7. python求绝对值_python中取绝对值简单方法总结

    python如何使用绝对值?下面给大家介绍三种求绝对值的方法: import math def abs_value1(): a = float(input('1.请输入一个数字:')) if a &g ...

  8. python加绝对值_python中取绝对值简单方法总结

    python如何使用绝对值?下面给大家介绍三种求绝对值的方法: import math def abs_value1(): a = float(input('1.请输入一个数字:')) if a &g ...

  9. python3.7 的pygame安装方法_Python中pygame安装方法图文详解

    本文实例讲述了Python中pygame安装方法.分享给大家供大家参考,具体如下: 这里主要描述一下我们怎样来安装pygame 可能很多人像我一样,发现了pygame是个好东东,但是就是不知道怎样使用 ...

最新文章

  1. 【声入人心:音频新体验】
  2. JAVA复习(对象的克隆、正则表达式)
  3. 【原】Python基础-函数
  4. 实现 OutOfMemory​
  5. 基本算法研究1-冒泡排序算法测试
  6. 牛客网--牛牛的闹钟
  7. 格密码教程(六):高斯二维格规约,解决SVP问题
  8. python+Django框架运用(一)
  9. Excel中 插入 对号等特殊字符
  10. mysql5.5创建学生情况表_数据库中创建一个学生表
  11. incaseformat病毒专杀:怎么查杀incaseformat病毒?紧急扩散!
  12. 《三体》读后思考-泰勒展开/维度打击/黑暗森林
  13. Cadence Allegro如何设置差分对
  14. 动态规划--背包计数--hdu2079选课时间
  15. 零基础如何学习SEO网站优化
  16. OCR应用:名片识别
  17. sfc /scannow是什么意思,有什么作用?(转载)
  18. Creo 3D转2D 尺寸问题
  19. 为什么前端拿到的数据和PostMan拿到的数据不一样
  20. 一个“不真实”的世界

热门文章

  1. html input 上标,javascript – 文本类型的输入字段中的上标
  2. dict下如何取值_年薪百万之路--第十七天 装饰器(下)和迭代器
  3. 传统的6d位姿估计fangfa1_李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪...
  4. nginx 的 rewrite 模块
  5. Problem D: 编程题B-向量的数量积
  6. PACKING【二维01背包】
  7. 迭代器模式(Iterator)
  8. 转向Kotlin——数据类和封闭类
  9. MyBatis-进阶2
  10. MySQL grant 权限,分别可以作用在多个层次上