python的metaclass关键字详解

 更新时间:2026年02月04日 09:54:49   作者:哈里谢顿  
metaclass其实就是最常用的元类,本文主要介绍了python的metaclass关键字的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

1 作用

元类一般用来:

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

2 代码示例:强制属性大写

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

# 方式一:直接改字典
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关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pytorch中TensorDataset,DataLoader的联合使用方式

    Pytorch中TensorDataset,DataLoader的联合使用方式

    这篇文章主要介绍了Pytorch中TensorDataset,DataLoader的联合使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python 如何读取字典的所有键-值对

    Python 如何读取字典的所有键-值对

    这篇文章主要介绍了Python 读取字典的所有键-值对操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python动态规划之零钱兑换问题详解

    Python动态规划之零钱兑换问题详解

    这篇文章主要介绍了Python动态规划之零钱兑换问题详解,这次我们就按照套路模板,再来剖析一道经典动规题目零钱兑换,计算并返回可以凑成总金额所需的 最少的硬币个数 如果没有任何一种硬币组合能组成总金额,返回-1,需要的朋友可以参考下
    2023-11-11
  • Python 查询学生的平均分数的实现

    Python 查询学生的平均分数的实现

    这篇文章主要为大家详细介绍了Python 查询学生的平均分数的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python连接到PostgreSQL数据库的方法详解

    Python连接到PostgreSQL数据库的方法详解

    顾名思义,PostgreSQL 是一款为高效管理数据库系统而创建的 SQL 系统软件,这篇文章主要为大家详细介绍了创建与 PostgreSQL 上的数据库的连接的过程,需要的小伙伴可以了解下
    2023-10-10
  • PyTorch的深度学习入门之PyTorch安装和配置

    PyTorch的深度学习入门之PyTorch安装和配置

    这篇文章主要介绍了PyTorch的深度学习入门之PyTorch安装和配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Windows下PyCharm配置Anaconda环境(超详细教程)

    Windows下PyCharm配置Anaconda环境(超详细教程)

    这篇文章主要介绍了Windows下PyCharm配置Anaconda环境,本文给大家分享一篇超详细教程,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 如何使用Python异步之上下文管理器

    如何使用Python异步之上下文管理器

    这篇文章主要为大家介绍了如何使用Python异步之上下文管理器详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python 多线程爬取案例

    Python 多线程爬取案例

    这篇文章主要介绍了Python 多线程爬取案例,爬虫属于I/O密集型的程序,所以使用多线程可以大大提高爬取效率,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python使用StringIO和BytesIO读写内存数据

    Python使用StringIO和BytesIO读写内存数据

    这篇文章介绍了Python使用StringIO和BytesIO读写内存数据的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论