python metaclass应用
应用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应用相关推荐
- Python MetaClass
在python type中,可以使用type来动态创建类,和使用class本质是一致的. class X:a = 1 X = type('X', (object,), dict(a=1)) 除了使用t ...
- Python MetaClass深入分析
python元类是比较难理解和使用的.但是在一些特定的场合使用MetaClass又非常的方便.本文本着先拿来用的精神,将对元类的概念作简要介绍,并通过深入分析一个元类的例子,来体会其功能,并能够在实际 ...
- python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?
摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...
- 如何创建你的第一个Python元类?
Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一.通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类.本文介绍 ...
- python 动态_python实现动态创建类的方法分析
本文实例讲述了python实现动态创建类的方法.分享给大家供大家参考,具体如下: python作为动态语言,如何在运行时动态创建类呢(python Creating classes dynamical ...
- python echo(msg) 字符串_[宜配屋]听图阁
本文实例讲述了python实现动态创建类的方法.分享给大家供大家参考,具体如下: python作为动态语言,如何在运行时动态创建类呢(python Creating classes dynamical ...
- Python进阶丨如何创建你的第一个Python元类?
摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...
- Python基础教程和入门教程
最近很多小伙伴都来问我,怎么学习python,应该从哪里开始学习呀,要学什么呀,没有辅助资料我也学不会呀,这次它来了,文章比较长耐心看完,看到最后聪明的人就能看懂我的神秘代码哟!! 一:学习目录 第1 ...
- python元类_Python元类
python元类 Welcome to today's tutorial on python metaclass. We all know that python is an object orien ...
最新文章
- c++ vector嵌套传参
- Angular structural指令host element的定位调试
- 模板设计模式_C常用设计模式——模板方法模式
- Docker、Kubernetes与PaaS不得不说的渊源
- Mac Office如何彻底卸载
- 这是不是微软MSN的一个Bug呢?
- SQlite数据库的C编程接口(二) 数据库连接 ——《Using SQlite》读书笔记
- 学会这个小技巧,SSH 会话连接永远不超时!
- java bigram_Android (Java) 编码惯例及最佳实践
- 梦开始的地方 —— C语言数据在内存中的存储(整形+浮点型)
- word中使用宏批量插入图片
- Excel 删除重复数据只保留一条的绿色工具,excel删除重复的行
- 【烈日炎炎战后端】消息队列(1.0万字)
- 运维服务能力管理体系应建立的几种能力
- Windows10 内存占用过高怎么办并且持续增长,怎么办?
- sql dateadd 和datediff的用法
- 大规模机器学习在爱奇艺视频分析理解中的实践
- python 动漫卡通人物图片大全_用Python实现抖音上的“人像动漫化”特效,原来这么简单...
- 编译osgEarth2.8遇到gdal_vrt.h找不到的问题
- “澳本聪”是怎么从网红一步步变成“众矢之的”?
热门文章
- 蓝桥杯51单片机之利用中断同时控制流水灯、数码管、独立按键、蜂鸣器【单片机开发初学者有趣综合案例】
- python用户标识符条件_使用sum(if…)或条件语句操作两个数据集,这些语句没有hivehadooppython的公共标识符...
- python索引用法_python 列表索引问题
- Python+pywin32操作Excel文件常用功能(268行代码+注释)
- Linux 线程控制
- 排序算法 c++(思想+code)
- 计算机硬盘修复教程,DiskGenius数据恢复教程 教你电脑硬盘数据如何恢复
- vs调试 右键 没有监视变量_IAR EWARM的SWO Trace调试功能
- php上传word并展示_这2种简单方法能将Word批量转换PDF
- C++之指针探究(十六):typedef结合函数指针