【Python】【元编程】【三】【元类】
2024-08-24 11:14:22
'''
# str、 type 和 LineItem 是object 的子类 str、 object 和 LineItem 是 type 的实例,因为它们都是类
object 类和 type 类之间的关系很独特: object 是 type 的实例,而 type
是 object 的子类。这种关系很“神奇”,无法使用 Python 代码表述,因为定义其中一
个之前另一个必须存在。 type 是自身的实例这一点也很神奇
>>> 'spam'.__class__
<class 'str'>
>>> str.__class__
<class 'type'>
>>> from bulkfood_v6 import LineItem
>>> LineItem.__class__
<class 'type'>
>>> type.__class__
<class 'type'>
''' '''
ABCMeta 最终所属的类也是 type。所有类都直接或间接地是 type 的实例,
不过只有元类同时也是 type 的子类。若想理解元类,一定要知道这种关系:元类(如
ABCMeta)从 type 类继承了构建类的能力
>>> import collections
>>> collections.Iterable.__class__
<class 'abc.ABCMeta'>
>>> import abc
>>> abc.ABCMeta.__class__
<class 'type'>
>>> abc.ABCMeta.__mro__
(<class 'abc.ABCMeta'>, <class 'type'>, <class 'object'>)
Iterable 是 object 的子类,是 ABCMeta 的实例。 object 和 ABCMeta 都是
type 的实例,但是这里的重要关系是, ABCMeta 还是 type 的子类,因为 ABCMeta 是
元类。示意图中只有 Iterable 是抽象类
我们要抓住的重点是,所有类都是 type 的实例,但是元类还是 type 的子类,因此可以
作为制造类的工厂。具体来说,元类可以通过实现 __init__ 方法定制实例。元类的
__init__ 方法可以做到类装饰器能做的任何事情,但是作用更大,如接下来的练习所
示。
''' #构建顺序:元类__prepare__() -> __new__() -> __init__()
最新文章
- 微信小程序产品定位及功能介绍
- windows下hla编译环境配置(转)_1
- Android SDK Manager国内更新代理
- (转)搞ACM的你伤不起
- Flex 布局教程:语法篇(转)
- 使用git ftp发布我个人的hexo博客内容
- Deploy Oracle 10.2.0.5 on Red Hat Enterprise Linux 6.4
- 实验吧_貌似有点难(php代码审计)&;头有点大
- c/c++ 求一个整数转换为二进制数时中‘1’的个数
- dskinlite(uieasy mfc界面库)使用记录1: schema验证xml
- HashMap实现原理简析及实现的demo(一看就明白)
- Ubuntu12.04下解决sudo apt-get update警告Duplicate sources.list entry
- POJ.2750.Potted Flower(线段树 最大环状子段和)
- 九、将cs文件快速的转换成可执行文件和响应文件(配置编译开关的文件)
- PAT A1007 Maximum Subsequence Sum (25 分)——最大子列和,动态规划
- 分布式Redis缓存串讲(一)
- scrapy爬取天气数据
- 使用CDN的网络访问过程
- 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
- nginx 服务器重启命令,关闭(转)
热门文章
- AngularJS2.0起步
- CNN实现垃圾邮件分类(行大小不一致要补全)
- Makefile小结
- Linux其他:环境变量配置
- python写一个密码生成器的类,要求有个类变量,统计一下一共生成过多少个密码。 要求有4个方法,1:构造方法 2 实例方法 3 类方法 4 静态方法
- 2018-2019-2 20165209 《网络对抗技术》 Kali安装
- SpringMVC中controller返回图片(转)
- 怎么说, 开发会很乐意去主动修改bug?
- 20145310 Exp7 网络欺诈技术防范
- 20145327 《网络对抗》逆向及BOF基础实践