首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏又见苍岚

    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 类型模型。

    61820编辑于 2022-08-06
  • 来自专栏sktj

    python metaclass ..

    防止属性被意外覆盖 解决重复使用metaclass metaclass new init references 正文 关于Python2.x中metaclass这一黑科技,我原以为我是懂的,只有当被打脸的时候 而且在实际项目中也使用过metaclass,比如creating-a-singleton-in-python一文中提到的用metaclass创建单例,比如用metaclass实现mixin效果,当然,正是后面这个使用案列让我重新认识 metaclass。 就有metaclass是function的实例,也解释了为什么metaclass为一个类是更好的选择。 (methods, "metaclass"); 8 if (metaclass !

    77140发布于 2019-12-13
  • 来自专栏python3

    Python Metaclass 初探

    先以一个大牛的一段关于Python Metapgramming的著名的话来做开头:

    66610发布于 2020-01-03
  • 来自专栏从流域到海域

    Python 元类(MetaClass)

    元类(MetaClass) MetaClass,直译过来就是元类,顾名思义,就是类的类,如果说class是object的模板,那么MetaClass就是class的模板(Java使用抽象类或者接口来做类的模板 In object-oriented programming, a metaclass is a class whose instances are classes. Just as an ordinary class defines the behavior of certain objects, a metaclass defines the behavior of Metaclasses can be implemented by having classes be first-class citizen, in which case a metaclass is https://en.wikipedia.org/wiki/Metaclass 元类的命名规则是 名字 + MetaClass #说明 python中双下划线加名字再加双下划线的变量名是预先定义的特殊类型

    1.3K80发布于 2018-02-05
  • 来自专栏nummy

    什么是元类metaclass

    原文地址:what is metaclass in Python? metaclass属性 当我们创建类的时候,可以给它添加metaclass属性: class Foo(object): __metaclass__ = something... [...] 所以对于以下代码: class Foo(Bar): pass Python工作流程如下: 首先检查Foo中是否具有属性__metaclass__? 可以定义模块级别的__metaclass__来实现。 这样模块中所有的类都是通过这个元类来创建的。 ) 你可能注意到参数upperattr_metaclass, 它代表要实例化的类。

    62320发布于 2018-08-27
  • 来自专栏Python七号

    Python黑魔法之metaclass

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

    53520发布于 2020-11-25
  • 来自专栏Frost's Blog

    How does it work - with_metaclass

    先简单介绍下Python中的元类(metaclass)。元类就是创建类的类,对于元类来说,类是它的实例,isinstance(cls, metaclass)将返回True。 Python def with_metaclass(meta, *bases): """Compatible metaclass :param meta: the metaclass <class '__main__.with_metaclass. __new__(metaclass, 'temp_class', (), {}),它创建了一个临时类,具有如下属性: 名称为temp_class 是函数内部类metaclass的实例,它的元类是metaclass 接下来,定义Bar时,Bar得到继承的元类metaclass,过程如下: 实例化metaclass 调用metaclass.

    1.3K10发布于 2019-11-30
  • 来自专栏sktj

    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往往是为了实现非常复杂的操作。

    73120发布于 2019-12-13
  • 来自专栏飞鸟的专栏

    八、python学习笔记-面向对象-metaclass

    # metaclass就是用来创建类的类 """ 1、一切事物皆为对象,python的class(类)本身也是一个对象(实例),它是tpye的对象(实例) 2、所有的类都默认继承object 3、创建类的本质就是

    29921编辑于 2022-01-14
  • 来自专栏爬虫技术学习

    Python metaclass 的原理和应用

    在实际的代码中,我们一般还是不会直接动态生成类的,还是调用 class Foo 语法来生成类比较常见一点,这时候可以指定 metaclass 参数就好了。 可以通过 Foo(metaclass=MetaFoo) 这种方式来指定元类。 class Foo(metaclass=MetaFoo): pass 这种定义和上面的元类用法效果完全是一致的。 __new__(meta, name, bases, attrs) class Model(metaclass=MetaModel): pass 这样用户使用的时候就可以这样定义: >>>

    56610编辑于 2023-03-06
  • 来自专栏python3

    python3 metaclass--创

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

    61320发布于 2020-01-13
  • 来自专栏菜皮日记

    Python type 和元类 metaclass

    答案就是 metaclassmetaclass 是 class 的 class,metaclass 创建 class,class 创建 object,metaclass→class→object: MyClass = MetaClass() my_object = MyClass() a 是对象,对象的类型是 class,class 的类型是 metaclass >>> a = 1 # 对象 > Python 3 中语法有变化: class Foo(object, metaclass=something): ... # 或 class Foo(object, metaclass=something 假设有一个需求是将左右的类的属性,都处理成大写的,演进过程如下: 给 module 指定一个 __metaclass__ 处理方法 # the metaclass will automatically metaclass 内部,经过处理的结果最终输出到另一个系统中。

    39710编辑于 2023-12-18
  • 来自专栏若尘的技术专栏

    54 - 元类(metaclass)的作用

    什么是元类,请用代码解释如何使用元类 ''' metaclass: 元类,类似于创建类的模板,所有的类都是通过他来创建的,可以自由控制类的创建过程 单例模式、ORM模式 ''' class SingLeton __instance class MyClass(metaclass=SingLeton): pass my1 = MyClass() my2 = MyClass() print(my1

    47176发布于 2021-06-05
  • 来自专栏快学Python

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

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

    72520发布于 2021-08-09
  • 来自专栏JetpropelledSnake

    深入理解Python中的元类(metaclass)

    三、__metaclass__属性 你可以在写一个类的时候为其添加__metaclass__属性。 如果Python没有找到__metaclass__,它会继续在Bar(父类)中寻找__metaclass__属性,并尝试做和前面同样的操作。 如果Python在任何父类中都找不到__metaclass__,它就会在模块层次中去寻找__metaclass__,并尝试做同样的操作。 如果还是找不到__metaclass__,Python就会用内置的type来创建这个类对象。 现在的问题就是,你可以在__metaclass__中放置些什么代码呢?答案就是:可以创建一个类的东西。 upperattr_metaclass,这并没有什么特别的。

    63240发布于 2019-02-15
  • 来自专栏小樱的经验随笔

    Metaclass实现一个精简的ORM框架

    __new__(cls, name, bases, attrs) 35 class Model(dict, metaclass=ModelMetaclass): 36 37 def __init

    67850发布于 2018-04-08
  • 来自专栏从零开始学自动化测试

    python 学习-打开潘多拉的魔盒-元类(metaclass)学习

    用一个图来表示对象(obj,或叫实例)、类(class)、元类(Metaclass)的关系。 学到这,就是掌握了使用 type 动态创建类的入门学习了~ 自定义元类(metaclass) 如果想把一个类设计成 MetaClass 元类,其必须符合以下条件: 必须显式继承自 type 类; 类中需要定义并实现 __new__(cls, name, bases, attrs) # 定义一个类,指定metaclass 元类创建,而不是由 type 创建 class NewDemo(object, metaclass __new__(cls, name, bases, attrs) # 定义一个类,指定metaclass 元类创建,而不是由 type 创建 class NewDemo(object, metaclass Use this metaclass to create an ABC.

    46720编辑于 2023-08-22
  • 来自专栏极客起源

    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为某一批需要具有通用功能的类添加属性和方法。

    55610发布于 2020-07-02
  • 来自专栏Java项目实战

    深度解析Python中的元类(Metaclass)及其神奇之处

    引言:在Python编程中,元类(Metaclass)是一项高级特性,它允许我们在定义类的时候动态地控制类的创建过程。 __new__(cls, name, bases, attrs)class BaseModel(metaclass=ModelMetaClass): passclass User(BaseModel __new__(cls, name, bases, attrs)class Interface(metaclass=InterfaceMetaClass): passclass MyInterface

    1.7K40编辑于 2023-10-08
  • 来自专栏韩曙亮的移动开发专栏

    【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )

    文章目录 一、Groovy 类内部和外部分别获取 metaClass 二、分析 Groovy 类内部和外部获取 metaClass 操作的字节码 三、使用 HandleMetaClass 注入方法 一、 MetaClass var10000 = this.metaClass; if (var10000 ! metaClass 的语句是 var3[0].callCurrent(this, this.metaClass); 此处直接调用 this.metaClass 获取 metaClass , 而这个 this ,metaClass 是构造方法中通过 this. $getStaticMetaClass() 获取的 MetaClass ; MetaClass var2 = this.

    51220编辑于 2023-03-30
领券