上文Python中object和type的关系中我们提到元类的概念。type就是最大的一个元类。在这里,我们详细介绍一下元类。
下图中,第一列中的对象,我们称之为元类
创建一个元类
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class M(type):
# 定义了一个元素,位于第一列
pass
print(M.__class__)
print(M.__bases__)
class CM(object, metaclass=M):
# 定义了一个元素,位于第二列
pass
print(CM.__class__)
print(CM.__bases__)
# my_cm位于第三列
my_cm = CM()
print(my_cm.__class__)
输出结果:
D:\Python\python.exe E:/工程/Python/元类.py
(,)
(,)
利用type动态创建类
上面只是浮光掠影,在介绍元类的使用之前,先掌握type动态创建类的方法
因为Python是动态语言,所以可以动态
def print_hello(self, s):
# 这相当于类中定义的方法属性,第一个参数须为self
print("hello %s " % s)
def __init__(self,name,age):
self.name = name
self.age = age
Hello = type("Hello", (object,), dict(f=print_hello, f2=print,num = 1,__init__=__init__))
print(Hello("jatrix",14).__dict__)
print(Hello.__dict__)
输出
{'name': 'jatrix', 'age': 14}
{'num': 1, 'f': , '__doc__': None, '__dict__': , '__init__': , 'f2': , '__module__': '__main__', '__weakref__': }
我们在什么情况下使用元类呢
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919344c4ef8b1e04c48778bb45796e0335839000
http://blog.csdn.net/psh2009/article/details/10330747
http://blog.csdn.net/igorzhang/article/details/39026885
http://www.cnblogs.com/Security-Darren/p/4094959.html
http://blog.csdn.net/igorzhang/article/details/39026885
http://www.cnblogs.com/Security-Darren/p/4094959.html
http://blog.csdn.net/u012005313/article/details/50111455
https://docs.python.org/3.5/howto/argparse.html
http://blog.csdn.net/Shiroh_ms08/article/details/52848049?locationNum=9&fps=1