应用1.abs实现抽象类就是需要修改metaclass
应用2.django中的orm也是修改metaclass

应用3:创建类的时候将类的属性都大写

class UpperAttrMetaclass(type):# 因为继承type,所以第一个参数是类的名称,第二个是基类,第三个是属性def __new__(cls, clsname, bases, attrs): uppercase_attrs = {attr if attr.startswith("__") else attr.upper(): vfor attr, v in attrs.items()}return type(clsname, bases, uppercase_attrs)# return type.__new__(cls, clsname, bases, uppercase_attrs)# return super(UpperAttrMetaclass, cls).__new__(cls, clsname, bases, uppercase_attrs)class Foo(metaclass=UpperAttrMetaclass):bar = 'bip'hasattr(Foo, 'bar') # False
hasattr(Foo, 'BAR') # True

应用4:通过mytype创建对象,实现继承

class MyType(type):def __init__(self, *args, **kwargs):super(MyType, self).__init__(*args, **kwargs)def __call__(cls, *args, **kwargs):print('xxxx')return super(MyType, cls).__call__(*args, **kwargs)# Base = MyType('Base', (object,), {})
# MyType('Base', (object,), {}) 是有MyType创建; metaclass=MyType
# 1. type可以创建类metaclass=type;MyType也可以创建类metaclass=MyType
# 2. Base = MyType('Base', (object,), {}) -->
# class Base(metaclass=MyType):
#     pass
# class Foo(Base):
#     passclass Foo(MyType('Base', (object,), {})):pass
obj = Foo()

应用5:通过封装函数来创建新的对象,更加方便

class MyType(type):def __init__(self, *args, **kwargs):super(MyType, self).__init__(*args, **kwargs)def __call__(cls, *args, **kwargs):return super(MyType, cls).__call__(*args, **kwargs)def with_metaclass(base):return MyType('XX', (base,), {})class Foo(with_metaclass(object)):pass

python metaclass应用相关推荐

  1. Python MetaClass

    在python type中,可以使用type来动态创建类,和使用class本质是一致的. class X:a = 1 X = type('X', (object,), dict(a=1)) 除了使用t ...

  2. Python MetaClass深入分析

    python元类是比较难理解和使用的.但是在一些特定的场合使用MetaClass又非常的方便.本文本着先拿来用的精神,将对元类的概念作简要介绍,并通过深入分析一个元类的例子,来体会其功能,并能够在实际 ...

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

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

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

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

  5. python 动态_python实现动态创建类的方法分析

    本文实例讲述了python实现动态创建类的方法.分享给大家供大家参考,具体如下: python作为动态语言,如何在运行时动态创建类呢(python Creating classes dynamical ...

  6. python echo(msg) 字符串_[宜配屋]听图阁

    本文实例讲述了python实现动态创建类的方法.分享给大家供大家参考,具体如下: python作为动态语言,如何在运行时动态创建类呢(python Creating classes dynamical ...

  7. Python进阶丨如何创建你的第一个Python元类?

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

  8. Python基础教程和入门教程

    最近很多小伙伴都来问我,怎么学习python,应该从哪里开始学习呀,要学什么呀,没有辅助资料我也学不会呀,这次它来了,文章比较长耐心看完,看到最后聪明的人就能看懂我的神秘代码哟!! 一:学习目录 第1 ...

  9. python元类_Python元类

    python元类 Welcome to today's tutorial on python metaclass. We all know that python is an object orien ...

最新文章

  1. c++ vector嵌套传参
  2. Angular structural指令host element的定位调试
  3. 模板设计模式_C常用设计模式——模板方法模式
  4. Docker、Kubernetes与PaaS不得不说的渊源
  5. Mac Office如何彻底卸载
  6. 这是不是微软MSN的一个Bug呢?
  7. SQlite数据库的C编程接口(二) 数据库连接 ——《Using SQlite》读书笔记
  8. 学会这个小技巧,SSH 会话连接永远不超时!
  9. java bigram_Android (Java) 编码惯例及最佳实践
  10. 梦开始的地方 —— C语言数据在内存中的存储(整形+浮点型)
  11. word中使用宏批量插入图片
  12. Excel 删除重复数据只保留一条的绿色工具,excel删除重复的行
  13. 【烈日炎炎战后端】消息队列(1.0万字)
  14. 运维服务能力管理体系应建立的几种能力
  15. Windows10 内存占用过高怎么办并且持续增长,怎么办?
  16. sql dateadd 和datediff的用法
  17. 大规模机器学习在爱奇艺视频分析理解中的实践
  18. python 动漫卡通人物图片大全_用Python实现抖音上的“人像动漫化”特效,原来这么简单...
  19. 编译osgEarth2.8遇到gdal_vrt.h找不到的问题
  20. “澳本聪”是怎么从网红一步步变成“众矢之的”?

热门文章

  1. 蓝桥杯51单片机之利用中断同时控制流水灯、数码管、独立按键、蜂鸣器【单片机开发初学者有趣综合案例】
  2. python用户标识符条件_使用sum(if…)或条件语句操作两个数据集,这些语句没有hivehadooppython的公共标识符...
  3. python索引用法_python 列表索引问题
  4. Python+pywin32操作Excel文件常用功能(268行代码+注释)
  5. Linux 线程控制
  6. 排序算法 c++(思想+code)
  7. 计算机硬盘修复教程,DiskGenius数据恢复教程 教你电脑硬盘数据如何恢复
  8. vs调试 右键 没有监视变量_IAR EWARM的SWO Trace调试功能
  9. php上传word并展示_这2种简单方法能将Word批量转换PDF
  10. C++之指针探究(十六):typedef结合函数指针