python的metaclass关键字详解

作者:

文章目录
  • 元类一般用来: 验证与约束 在类创建时检查它是否符合特定的规范。例如:强制子类必须拥有某个属性,或者方法名必须以某种格式命名。 动态修改类 在类正式生成之前,动态地为类增加方法、修改属性名、或者改变继承关系。 自动注册 在框架开发中,元类常用来自动记录哪些类继承了基类。例如插件系统中,只要你定义一个类,元类就会自动把它加入到已激活的插件列表中。 实现特定领域的DSL 比如django的orm或pydantic的模型
  • 假设要实现一个功能:让某个类中定义的所有属性名自动变成大写 # 方式一:直接改字典 class UpperMeta(type): “””把除 __xxx__ 以外的所有属性名强制变成大写””” def __new__(mcs, name, bases, namespace, **kw): new_ns = {} for k, v in namespace.items(): if k.startswith(‘__’) and k.endswith(‘__’): new_ns[k] = v # 魔法方法保持原样 else: new_ns[k.upper()] = v # 其余统一变大写 return super().__new__(mcs, name, bases, new_ns, **kw) class Foo(metaclass=UpperMeta): x = 1 y = 2 def hello(self): return ‘hello’ print(Foo.X) # 1 print(Foo.Y) # 2 print(Foo.HELLO()) # ‘hello’ 但是在,一般场景下,可以使用类装饰器来代替,因为它更加简单,可以避开元类的复杂性。 https://www.jb51.net/python/358207z57.htm 到此这篇关于python的metaclass关键字详解的文章就介绍到这了,更多相关python metaclass关键字内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python中metaclass原理与用法详解 Python中的Classes和Metaclasses详解 详解python单例模式与metaclass 举例讲解Python中metaclass元类的创建与使用 Python探索之Metaclass初步了解 python的metaclass使用小结 Python黑魔法之metaclass详情  python中的元类metaclass详情
  • 目录
    • 1 作用
    • 2 代码示例:强制属性大写

    metaclass其实就是最常用的元类,也就是:创建类的类

    元类一般用来:

    • 验证与约束 在类创建时检查它是否符合特定的规范。例如:强制子类必须拥有某个属性,或者方法名必须以某种格式命名。
    • 动态修改类 在类正式生成之前,动态地为类增加方法、修改属性名、或者改变继承关系。
    • 自动注册 在框架开发中,元类常用来自动记录哪些类继承了基类。例如插件系统中,只要你定义一个类,元类就会自动把它加入到已激活的插件列表中。
    • 实现特定领域的DSL 比如django的orm或pydantic的模型

    假设要实现一个功能:让某个类中定义的所有属性名自动变成大写

    # 方式一:直接改字典
    class UpperMeta(type):
        """把除 __xxx__ 以外的所有属性名强制变成大写"""
        def __new__(mcs, name, bases, namespace, **kw):
            new_ns = {}
            for k, v in namespace.items():
                if k.startswith('__') and k.endswith('__'):
                    new_ns[k] = v          # 魔法方法保持原样
                else:
                    new_ns[k.upper()] = v  # 其余统一变大写
            return super().__new__(mcs, name, bases, new_ns, **kw)
    
    class Foo(metaclass=UpperMeta):
        x = 1
        y = 2
        def hello(self):
            return 'hello'
    
    print(Foo.X)        # 1
    print(Foo.Y)        # 2
    print(Foo.HELLO())  # 'hello'
    

    但是在,一般场景下,可以使用类装饰器来代替,因为它更加简单,可以避开元类的复杂性。 https://www.jb51.net/python/358207z57.htm

    到此这篇关于python的metaclass关键字详解的文章就介绍到这了,更多相关python metaclass关键字内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python中metaclass原理与用法详解
    • Python中的Classes和Metaclasses详解
    • 详解python单例模式与metaclass
    • 举例讲解Python中metaclass元类的创建与使用
    • Python探索之Metaclass初步了解
    • python的metaclass使用小结
    • Python黑魔法之metaclass详情
    •  python中的元类metaclass详情

    站内搜索