码迷,mamicode.com
首页 > 其他好文 > 详细

元类type

时间:2018-02-25 20:43:41      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:rgs   代码   编译器   阶段   例子   pytho   foo   type   过程   

自定义元类来创建类

python中的类也是对象,是type类的对象

在编译器运行到class Foo的时候自动运行Foo = type(‘Foo‘,{object,},{})来创建类对象并放入内存中

下面的例子展示了实例创建的过程

 1 class MyType(type):
 2     def __init__(self, *args,**kwargs):
 3         type.__init__(self,*args,**kwargs)
 4         print(第一步:解释器执行到class Foo时,创建Foo类对象)
 5     def __call__(self, *args, **kwargs):
 6         print(第二步:foo = Foo("foo")时调用元类的__call__方法,在此方法中创建实例)
 7         #foo = Foo("foo") = MyType(‘Foo‘,(object,),{})()
 8         obj = self.__new__(self)
 9         print(第四步:实例创建完毕,执行实例的__init__方法)
10         self.__init__(obj, *args, **kwargs)
11         #返回实例,在外部赋值给foo
12         return obj
13 
14 class Foo(object,metaclass=MyType):
15     def __init__(self,name):
16         self.name = name
17     def __new__(cls, *args, **kwargs):
18         print(第三步:返回实例)
19         return object.__new__(cls)
20 # 第一阶段:解释器从上到下执行代码创建Foo类
21 # 第二阶段:通过Foo类创建obj对象
22 foo = Foo(foo)
23 print(foo)
24 print(foo.name)

 

元类type

标签:rgs   代码   编译器   阶段   例子   pytho   foo   type   过程   

原文地址:https://www.cnblogs.com/cx59244405/p/8470142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!