首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python metaclass 简介

metaclass 译为元类,可以理解为 metaclass 为描述类的超类,同时可以改变子类的形态,本文介绍相关内容。...而metaclass 是控制类实例(这里表示类本身的定义,不是类的实例)产生的”超类“ 直接看一个 metaclass的例子可以有更直观的理解 metaclass 实例 class Mymeta(...如果存在__metaclass__,Python将会使用指定的__metaclass__来创建class Foo。...显式指定 metaclass 在创建类时显式指定 metaclass 类的内容 class Foo(metaclass=Mymeta): pass 该方法指定的metaclass会被子类继承...使用 metaclass 的风险 不过,凡事有利必有弊,尤其是 metaclass 这样“逆天”的存在。正如你所看到的那样,metaclass 会"扭曲变形"正常的 Python 类型模型。

36120
您找到你想要的搜索结果了吗?
是的
没有找到

Python黑魔法之metaclass

今天我们就来看看,metaclass 到底是阿拉丁神灯,还是潘多拉魔盒。 什么是 metaclass 很多书都会翻译成 元类,仅从字面理解, meta 的确是元,本源,翻译没毛病。...在没有 metaclass 的情况下,子类继承父类,父类是无法对子类执行操作的,但有了 metaclass,就可以对子类进行操作,就像装饰器那样可以动态定制和修改被装饰的类,metaclass 可以动态的定制或修改继承它的子类...metaclass 能解决什么问题? 你已经知道了 metaclass 可以像装饰器那样定制和修改继承它的子类,这里就说下它能解决什么实际问题。...现在你有 1 万个不同格式的 YAML 配置文件,本来你需要写 1 万个类来加载这些配置文件,有了 metaclass,你只需要实现一个 metaclass 超类,然后再实现一个子类继承这个 metaclass...metaclass 大展身手的机会。

33520

python metaclass 详细说明

type,作为metaclass,创建了以上所有的class object。 type是Python定义好的metaclass。当然,我们也可以自定义metaclass。...设置了__metaclass__的话,class的创建就会由指定的metaclass处理,那么我们只需要让这个metaclass将所有attribute的名字改成大写即可。...class作为metaclass可以继承其他的metaclass,重载母类的方法,甚至可以使用别的metaclass。...如果我们使用class作为metaclass,某一使用该metaclass的class的子类将仍是是其metaclass的实例。但这一功能无法通过使用函数作为metaclass实现。...使用metaclass可以使得代码结构更加优美。实际应用中我们很少使用metaclass来实现上面那样简单的功能。使用metaclass往往是为了实现非常复杂的操作。

51820

python3 metaclass--创

之前学python的时候就看见过metaclass的文章,没看懂,那篇博客后面说到,metaclass是python的黑魔法99% 不会用到。于是果断放弃。...不过最近看flask-WTForm组建的源码,一开始就是metaclass。没办法,硬着头皮重新看metaclass。基本了解,现在总结如下: 一、metaclass干嘛的?...metaclass是指定类由谁创建。能够定制类的创建过程 指定类由谁创建的???开什么玩笑,类不是由'我'创建的吗???? python中一切皆对象,类也是对象,类是由type类创建。...python也给我们提供了自定义类的创建的方法,即metaclass。type也是类,它可以创建类,因此我们叫它元类,不要过分纠结这是什么鬼,知道type类可以创建类就行。...四、定制类生成的好处: 当然是非常多的,最容易理解的,单例模式便可以用 metaclass来实现。其他的好处,如ORM,我还说不上来,等弄清楚再补充。

40720

改变python对象规则的黑魔法metaclass

今天小明哥要分享的主题是:改变类定义的神器-metaclass 看到标题,你可能会想改变类的定义有什么用呢?什么时候才需要使用metaclass呢?...metaclass到底是什么 那type和metaclass有什么关系呢?metaclass到底是什么呢?...如果是,Python会通过__metaclass__创建一个名字为Foo的类(对象) 如果Python没有找到__metaclass__,它会继续在Bar(父类)中寻找__metaclass__属性,并尝试做和前面同样的操作...如果Python在任何父类中都找不到__metaclass__,它就会在模块层次中去寻找__metaclass__,并尝试做同样的操作。...总结 这次分享主要是简单的浅析了 metaclass 的实现机制。通过实现一个orm框架并解读 YAML 的源码,相信你已经对metaclass 有了不错的理解。

40220

基于Python的元类(metaclass):使用详解与应用指南

前言 元类的概念 使用元类的基本步骤 元类的基本语法 通过type类创建元类 元类的应用场景 具体案例 结束语 前言 众所周知,Python是一种灵活且强大的编程语言,而在Python编程中,元类(metaclass...创建类:使用元类来创建类时,需要在类定义中指定元类,可以通过metaclass关键字参数来指定元类。...2、使用元类 要使用元类,首先需要在定义类时将元类指定为metaclass关键字参数。...然后使用元类MyMeta创建了一个名为MyClass的类,并使用metaclass关键字参数指定元类。最后,创建了一个MyClass的实例my_obj,并打印了该实例的version属性。...然后,我们使用元类ModelMeta创建了一个名为Model的基类,并使用metaclass关键字参数指定元类。

33142

Python编程思想(30):用 metaclass搞定一批类的特性

如果希望创建某一批类全部具有某种特征,则可以通过 metaclass来实现。使用 metaclass可以在创建类时动态修改类定义。...为了使用 metaclass动态修改类定义,程序需要先定义 metaclassmetaclass应该继承type类,并重写new()方法。 下面程序定义了一个 metaclass类。...__new__(cls, name, bases, attrs) # 定义House类 class House(metaclass=MyMetaClass): __slots__ = ('name...运行这段代码,会输出如下的内容: 1780000.0 76.8 从上面的输出结果来看,通过使用 metaclass可以动态修改程序中的一批类,对它们集中进行某种修改。...这个功能在开发一些基础性框架时非常有用,程序可以通过使用 metaclass为某一批需要具有通用功能的类添加属性和方法。

38010
领券