《python的metaclass关键字详解》metaclass其实就是最常用的元类,本文主要介绍了python的metaclass关键字的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具...
metaclass其实就是最常用的元类,也就是:创建类的类
1 作用
元类一般用来:
- 验证与约束 在类创建时检查它是否符合特定的规范。例如:强制子类必须拥有某个属性,或者方法名必须以某种格式命名。
- 动态修改类 在类正式生成之前,动态地为类增加方法、修改属性名、或者改变继承关系。
- 自动注册 在框架开发中,元类常用来自动记录哪些类继承了基类。例如插件系统中,只要你定义一个类,元类就会自动把它加入到已激活的插件列表中。
- 实现特定领域的DSL 比如django的orm或pydantic的模型
2 代码示例:强制属性大写
假设要实现一个功能:让某个类中定义的所有属性名自动变成大写
# 方式一:直接改字典
class UpperMeta(type):
"""把除 __xxx__ 以外的所有属性名强制变成大写"""
def __new__(mcs, name, bases, namespace, **kw):
new_pythonns = {}
for k, v in namespace.itempythons():
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):
www.qingyu.net return 'hello'
print(Foo.X) # 1
print(Foo.Y) # 2
print(Foo.HELLO()) # 'hello'
但是在,一般场景下,可以使用类装饰器来代替,因为它更加简单,可以避开元类的复杂性。 https://www.jb51.net/python/358207z57.javascripthtm
到此这篇关于python的metaclass关键字详解的文章就介绍到这了,更多相关python metaclass关键字内容请搜索轻语网(www.qingyu.net)以前的文章或继续浏览下面的相关文章希望大家以后多多支持轻语网(www.qingyu.net)!
本文标题: python的metaclass关键字详解
本文地址: http://www.qingyu.net/jiaoben/python/732496.html

如果本文对你有所帮助,在这里可以打赏