Python(metaclass)

示例代码


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) python当中metaclass探讨 类和元类中的...
    庞贝船长阅读 235评论 0 0
  • 先以一个大牛的一段关于Python Metapgramming的著名的话来做开头: Metaclasses are...
    西北那个峰阅读 302评论 0 0
  • metaclass翻译过来应该是元类的意思。python中一切皆是对象,连类也是对象 而类是元类的实例,默认的cl...
    核桃啊阅读 176评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,200评论 19 139
  • 傍晚,喧闹的城市,走在马路上,身边经过一对大概高中生的样子的一对情侣,男孩说:我们要在一起一辈子。女孩:我们的约定...
    奶豆弟弟阅读 433评论 0 0