美文网首页
使用元类

使用元类

作者: 噜噜迅儿 | 来源:发表于2018-07-24 09:43 被阅读0次

    type()函数既可以返回一个对象的类型,又可以创建出新的类型。

    def fn(self, name='world'):
        print('hello, %s.' % name)
    
    Hello = type('Hello', (object,), dict(hello=fn))
    '''
    param name: 类的名称
    param bases: 类继承的父类集合
    param dict: class的方法名称与函数绑定
    '''
    

    通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。

    metaclass

    除了使用type()动态创建类以外,要控制类的创建行为,还可以使用metaclass。

    先定义metaclass,就可以创建类,最后创建实例。

    '''
    param cls: 当前准备创建的类的对象;
    param name: 类的名字;
    param bases: 类继承的父类集合;
    param attrs: 类的方法集合。
    '''
    class ListMetaclass(type):
        def __new__(cls, name, bases, attrs):
            attrs['add'] = lambda self, value: self.append(value)
            return type.__new__(cls, name, bases, attrs)
    
    class Mylist(list, metaclass=ListMetaclass):
        pass
    
    >>> L = MyList()
    >>> L.add(1)
    >> L
    [1]
    

    相关文章

      网友评论

          本文标题:使用元类

          本文链接:https://www.haomeiwen.com/subject/hmxnpftx.html