美文网首页
Python(metaclass)

Python(metaclass)

作者: JetLu | 来源:发表于2016-09-13 01:04 被阅读26次

    示例代码


    class A(type):
        @classmethod
        def __prepare__(cls, name, bases, **kwds):
            # 返回一个字典作为__new__里的namespace
            return {
                '__init__': lambda self, i: print(i)
            }
    
        def __new__(cls, name, bases, namespace, **kwds):
            # namespace包含了类的属性和方法
            # 此时修改namespace依旧会影响类的结构
            return type.__new__(cls, name, bases, namespace)
    
        def __init__(self, name, bases, namespace, **kwds):
            # 此时修改namespace将不会影响类的结构
            # 可以通过self来修改
            self.echo = lambda self, i: print(i)
    
    class B(metaclass=A):
        pass
    
    b = B('hello')
    b.echo('world')
    

    参考


    相关文章

      网友评论

          本文标题:Python(metaclass)

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