直接上代码

元类 metaclass

class MyType(type):def __init__(self, *args, **kwargs):print("MyType.__init__")super().__init__(*args, **kwargs)def __new__(cls, *args, **kwargs):print("MyType.__new__")new_cls = super().__new__(cls, *args, **kwargs)print(new_cls)return new_clsdef __call__(self, *args, **kwargs):"""python实例化一个类时,先调用__new__后调用__init__的原因"""print("MyType.__call__")empty_obj = self.__new__(self)self.__init__(empty_obj, *args, **kwargs)return empty_objclass Foo(metaclass=MyType):  # Foo是MyType的对象def __init__(self, name):print("Foo.__init__")self.name = nameclass Foo2(Foo):  # 这个类也是有MyType创建的passif __name__ == "__main__":# 实例化一个类对象时, 调用的是该类的元类的__call__foo = Foo("alex")  print(foo.name)

元类实现单例模式

元类中的其它参数

class Spam(metaclass=MyMeta, debug=True, synchronize=True):pass

https://python3-cookbook.readthedocs.io/zh_CN/latest/c09/p15_define_metaclass_that_takes_optional_arguments.html


装饰器 decorator

装饰方法

import timedef decorator(function):def wrapper(*args, **kwargs):start_time = time.time()result = function(*args, **kwargs)end_time = time.time()print("use time:", end_time - start_time)return resultreturn wrapper@decorator
def func(sleep_time):time.sleep(sleep_time)return 0if __name__ == "__main__":print("func: ", func)# func:  <function decorator.<locals>.wrapper>ret = func(1)"""使用装饰器装饰后, 调用func()实际上是调用 wrapper()"""print(ret)

装饰类

def Domain(domain):print("enter decorater, domain=", domain)print("dir(domain)=", dir(domain))def wrapper(cls):print("enter wrapper, cls=", cls)cls.num_of_animals = 10cls.domain = domaincls.insert = MysqlMapper.insertprint("类名", cls.__name__, dir(cls.__class__))print("dir(cls)=", dir(cls))return clsreturn wrapper@Domain(Animal)
class AnimalDao(BaseMapper):pass

python 元类与装饰器相关推荐

  1. 初学者python笔记(类的装饰器、property方法、元类)

    文章目录 上下文协议管理 类的装饰器基本原理 property方法的巧用 利用描述符自定制property property下的setter与deleter Python的元类 元类的概念 自定义元类 ...

  2. python类装饰器应用_python之描述符应用与类的装饰器

    一.描述符应用 1.1上下文管理协议 在上文中我们提到with语句中的上下文管理器.with语句可以如此简单但强大,主要依赖于上下文管理器.那么什么是上下文管理器?上下文管理器就是实现了上下文协议的类 ...

  3. 兄弟连学python(06)装饰器:对类或者函数进行功能的扩展

    #第一步,基本函数 ''' def hulk(): print("酒逢知己饮,诗向会人吟!") #调用函数 hulk() #第二步 扩展函数功能(不能修改原函数) #用于扩展基本函 ...

  4. python 类的使用(5)之类装饰器(类的装饰器和类作为装饰器)

    在阅读博客中,发现了类装饰器的存在,由于之前就在写类相关的专栏,这次就赶紧补上之前的内容啦.类装饰器这个词是有歧义的,因为类本身可以作为装饰器,一个类也可以被函数装饰器所装饰.今天就简单介绍一下这两种 ...

  5. python装饰器类-Python装饰器15-开始使用类作为装饰器

    基于前面的使用函数作为装饰器的理解,将类作为装饰器时需要保证以下几点 类的实例是可调用的 类需要一个地方讲被装饰的函数传入到类的实例里 第一条可以通过__call__实现,第二条可以通过__init_ ...

  6. 50 Python - 装饰器 类定义装饰器

    04 类定义装饰器 上节通过函数定义装饰器,本节通过类定义装饰器 001 定义类装饰器 定义一个类,类里面两个函数,一个构造函数init(),一个调用函数call() 构造函数init时候,传递一个函 ...

  7. python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  8. 如何创建你的第一个Python元类?

    Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一.通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类.本文介绍 ...

  9. python return用法_初学Python要了解什么 装饰器知识汇总有哪些

    初学Python要了解什么?装饰器知识汇总有哪些?在Python学习过程中,有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用,比 ...

最新文章

  1. 眠眠interview Question
  2. scala面向对象之trait
  3. 可持久化3--可持久化01Trie
  4. Ubuntu server下“初始化月份字符串出错”的解决
  5. 诗与远方:无题(五十五)- 曾经写给妹子的一首诗
  6. linux es数据库 head,centos7安装Elasticsearch及Es-head插件详细教程(图文)
  7. Mac 上使用windows软件--wineskin
  8. 小黑计算机一级题库,小黑课堂计算机一级题库
  9. matlab半波整流怎么做,基于Matlab的单相半波可控整流电路的设计与仿真.doc
  10. 【Unity 学习笔记】01 素材的导入和常见功能
  11. authc过滤器 shiro_shiro原理之过滤器
  12. 解决在HD Audio模式下Windows系统前置面板耳机无声音的问题
  13. 高产攻关保全年粮丰 国稻种芯·中国水稻节:广西多措并举
  14. Python+MySQL+云服务器 定时爬取B站日榜与微博热搜榜信息并保存至数据库
  15. UVA - 1389 Hard Life【分数规划+最小割】【最大权闭合图】
  16. 大学物理复习--变化的电磁场
  17. VMware虚拟机下载安装教程
  18. 无线上网设备大集合,看看你的设备最适合哪种?
  19. 程序员必备的8个编程工具
  20. html如何添加时钟效果,HTML5实现时钟效果

热门文章

  1. python中“_”的含义
  2. php首页有head,head是什么意思?
  3. matlab中主次坐标,【基本工具】S02E20 坐标轴与主次刻度用法详解
  4. 《英灵神殿》是如何让不玩生存游戏的我沉迷100小时的
  5. 动态库.so(共享库)的制作和使用
  6. “计算机网络“ 那些事
  7. Redis的十大常见应用场景
  8. java人员的工龄_计算员工工龄,这个问题千万要注意
  9. 前端和后端之间有什么区别
  10. html网页蒲公英特效代码,代码实现网页左下角添加蒲公英飘动特效