python元类__metaclass__

<pre name="code" class="python">#python元类,类的创建过程
#首先调用type.__new__
#然后调用类的构造函数 class.__init__

def toString(c):
    s="";
    if type(c)==tuple:
        s="tuple:"
        for i in c:
            s+=str(i)
            s+=","
        return s
    elif type(c) == dict:
        s="dict:"
        for k,v in c.items():
            s+= "k=%s,v=%s" % (k,v)
            s+=","
        return s
    elif type(c) == list:
        s="list:"
        for i in c:
            s+=str(i)
            s+","
        return s
    else:
        return c

class ListMetaClass(type):
    def __new__(cls, name, bases, attr):
        #对于比较长的代码行,可以使用\来分行
        #有没有感觉跟C++的define定义换行的感觉一样(-><*><-)
        print('cls=%s, name=%s,bases=%s,attrs=%s'              % (toString(cls), toString(name),                  toString(bases), toString(attr)))
        attr['add']=lambda self,value:self.append(value)
        return type.__new__(cls, name, bases, attr)

class MyList(list):
    __metaclass__ = ListMetaClass

if __name__ == "__main__":
    myList = MyList()
    myList.add(100)
    print(myList)

    def listAdd(self,value):
        self.append(value)

    MyList2 = ListMetaClass("MyList2", (list,), dict(add=listAdd))
    myList2=MyList2()
    myList2.add(1000)
    print(myList2)
"""
程序输出:
cls=<class '__main__.ListMetaClass'>,
name=MyList,
bases=tuple:<type 'list'>,,
attrs=dict:k=__module__,v=__main__,k=__metaclass__,v=<class '__main__.ListMetaClass'>,
[100]
cls=<class '__main__.ListMetaClass'>,
name=MyList2,
bases=tuple:<type 'list'>,,
attrs=dict:k=add,v=<function listAdd at 0x01AACBB0>,
[1000]
"""    
				
时间: 2024-10-14 15:33:22

python元类__metaclass__的相关文章

python元类分析

刚开始接触到Python新式类中的元类的概念的时候很是纠结了下..不知道这是个啥东西... 用以下几个定义来说明吧: (1)Python中,类也是对象..只不过这种对象比较的特殊,他用于创建别的对象 (2)元类也是一种类,只不过它更特殊...他是用来创建别的类的类...(呵呵,是不是很拗口) 先来看一段代码吧: class Fjs(object): def __init__(self, name): self.name = name def hello(self): print "hello b

python 元类的简单解释

本文转自博客:http://www.cnblogs.com/piperck/p/5840443.html 作者:piperck python 类和元类(metaclass)的理解和简单运用 (一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的类 class Trick(object): pass 当python在执行带class语句的时候,会初始化一

Python元类的一些应用

最近刚接触python的元类,网络上有比较详细的介绍,这里是在看Django时候发现一点关于元类的应用,做个笔记. from django.utils import six class A(type):     def __new__(cls, name, parents, attrs):         return type.__new__(cls, name, parents, attrs) class C(six.with_metaclass(A)):     pass 创建C类的时候,

python元类深入理解

1.python 中的类 在python中,类也是一个对象,只不过这个对象拥有生成实例的能力,我们一般使用class XXX来定义一个类,在python解释器执行到这个地方的时候会自动创建出这个对象,python也为我们提供了手动创建类的方法,type().type()这个方法对我们来说并不陌生,我们所熟知的用法是:class = type(instance),当传入一个参数时,type()返回这个参数的类.而今天我们要用到的是type的另一个功能.type("classname",(

深入理解python元类

类也是对象 在理解元类之前,你需要先掌握Python中的类.Python 中的类概念借鉴 Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.当然在 Python 中这一点也是成立的. >>> class ObjectCreator(object): ... pass ... >>> my_object = ObjectCreator() >>> print my_object <__main__.

python 元类

元类(metaclass)是用来创建类的类 type(object):返回一个对象的类型,与object.__class__的值相同,type(name,bases,dict):创建一个新的type类型,name就是新class的name,值存到__name__属性中,bases是tuple类型,值会存到__bases__中,dict的值存到__dict__中 type exampleclass X: ... a = 1 ... X = type('X', (object,), dict(a=1

python 元类与定制元类

1:元类 元类:类的创建与管理者 所有类的元类是type class a: pass print(type(a)) 结果:<class 'type'> 2:定制元类 类的实例化过程:(可看类的基础与要点) 1)调用__new__()创建实例 2)调用__init__()初始化上面创建出来的实例 所以:定制实例便是改变父类的__new__()或__init__()方法 例子: 1 class MyMeta(type): 2 def __init__(self,name,bases,dicts):

Python元类

学懂元类,首先要知道两句话: 道生一,一生二,二生三.三生万物 我是谁?我从哪里来?我要到那里去? 在Python的世界里,拥有一个永恒的道:type,如此广袤无垠的Python生态圈,都是由type产生出来的. 道生一,一生二,二生三,三生万物. 道:即就是type 一:即是metaclass 二:即是class(或者实例生成器) 三:即是instance 1 关于类 道和一,是我们今天讨论的命题,而二.三.和万物,则是我们常常使用的类.实例.属性和方法,用hello world来举例: 1

Python—元类

什么是元类? 元类是类的类,是类的模板 元类是用来控制如何创建类的,正如类是创建对象的模板一样,而元类的主要目的是为了控制类的创建行为 元类的实例化的结果为我们用class定义的类,正如类的实例为对象(f1对象是Foo类的一个实例,Foo类是 type 类的一个实例) type是python的一个内建元类,用来直接控制生成类,python中任何class定义的类其实都是type类实例化的对象 方式一:使用class关键字 class Chinese(object): country='China