Python元类MetaClass

上文Python中object和type的关系中我们提到元类的概念。type就是最大的一个元类。在这里,我们详细介绍一下元类。
下图中,第一列中的对象,我们称之为元类

Python元类MetaClass_第1张图片
Type,TypeObject,instance

创建一个元类

#!/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

你可能感兴趣的:(Python元类MetaClass)