大家好,又见面了,我是全栈君 简单定义“元编程是一种编写计算机程序的技术,这些程序可以将自己看做数据,因此你可以在运行时对它进行内审、生成和/或修改”,本博参考<<Python高级编程>>将对元编程内容进行详细描述 概述 Python元编程有两种方法,一是采用类似“装饰器”的工具对基本元素(例如函数、类、类型)内审和对其进行实时创建和修改,二是运用类型”元类”的方式对类实例的创建过程进行修改,甚至于允许重新设计 Python面对对象编程范式的实现。 元类 元类是Python的一个重要特性,是定义其他类的类,理解其工作方式,最重要的是要知道定义了对象实例的类也是对象,那么它一定有与其相关联的类,所有的类定义的基类都是内置的type类。 3.3 元类的使用 元类是一种非常强大的特性,但总是会是代码更加复杂,将其用于任意类型的类时,这可能会降低代码的鲁棒性,我们必须灵活的使用元类。
元编程 什么是元编程 维基百科上的解释为: 元编程(英语:Metaprogramming),又译超编程,是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它们的资料,或者在运行时完成部分本应在编译时完成的工作 知乎上有一个关于元编程的解释是比较直观的。 ,那么编写程序乙的活动,就可以算作 meta-programming,「元编程」。 那我们看看Julia中的元编程到底是什么及如何应用? + 4) ex = make_expr2(:+, 1, Expr(:call, :*, 5, 8)) >>:(2 + 5 * 8) eval(ex) >>42 Macros Macro也是Julia元编程的一个重要应用
__dict__) print(user.age) # 调用`IntField`中的`__get__`方法 # 元类 元类是创建类的类. type -> class -> 对象 ) User = type("User", (Base,), {"test": test, "name": "zhangsan"}) user = User() user.test() # 自定义元类 自定义元类需要通过继承type实现 如果父类有metaclass,则子类和父类的创建都需要通过该元类实例化得到。 BaseMeta __new__.. zhangsan 元类的经典例子是django ORM
image.png image.png image.png
下午的时候,张大胖洋洋得意地给Bill展示自己的工作成果,Bill说:“不错啊,都开始元编程了!” “元编程?” “对啊,你不是用程序来生成程序嘛,这就是一种元编程。” 张大胖没想到的工作居然就是高大上的“元编程”,更高兴了。 “还有,如果把CSV文件看成数据库的表,代码生成器自动生成的EmployeeParser不就相当于DAO吗? Bill 笑道:“你可以用动态语言,比如Ruby,元编程很强大,实现你这个功能简直是小菜一碟。” Bill问道:“怎么样,元编程不错吧?” Bill说:“其实吧,编程语言中,元编程能力最强大的还属LISP,在LISP当中,程序和数据的表现形式是一致的,造就了它无以伦比的元编程能力,LISP程序可以像操作数据一样操作代码。
元编程的概念有很多文章,通过操作更加底层的api做更多个性化的功能。
元编程 编译期执行的变成,类似宏定义和模板,再编译期需要展开实现 宏定义 #define ARG_COUNTX(…) A1X(VA_ARGS) #define A3X(x) x //使宏定义在同一级展开 POINT_OFFSET_3(TYPE,__VA_ARGS__)) REGISTER_OFFSET(A,a,b,c)//遍历A的成员地址 for循环 宏定义循环可以通过,类似上面的宏递归展开方式实现 模板元编程
Python元编程被称为“黑魔法”。Python界的传奇人物Tim Peters有云: 引用 Python的元编程这种黑魔法99%的人都无需了解,如果你拿不准是否应该用到它时,你不需要它. OpenERP基本遵循了Tim Peters的教诲,但是却在6.1版本之后忍不住触及了一点点, Technorati 标签: Openerp,Python,元编程 从此游走于黑白两道之间:) 其实 OpenERP中用到的元类(MetaClass)作用非常简单:就是在V6.1后我们在模块中所定义的实体类,不需要进行实例化,比如 OpenERPV6.1之前的实体类定义: 程序代码: [选择] ...: self.x = x ...: In [2]: a = A(2) In [3]: a Technorati 标签: Openerp,Python,元编程 类的实例对象可以对应五花八门我们定义的各种类,同理,我们是否可以定义除type以外用来生成类对象的五花八门的元类呢?答案当然是肯定的。
元编程作为一种新兴的编程方式,受到了越来越多的广泛关注。结合已有文献和个人实践,对有关 C++ 元编程进行了系统的分析。 首先介绍了 C++ 元编程中的相关概念和背景,然后利用科学的方法分析了元编程的 演算规则、基本应用 和实践过程中的 主要难点,最后提出了对 C++ 元编程发展的 展望。 1. 由于元编程不同于一般的编程,在程序设计上更具有挑战性,所以受到了许多学者和工程师的广泛关注。 1.4 元编程的语言支持 C++ 的元编程主要依赖于语言提供的模板机制。 元编程的基本应用 利用元编程,可以很方便的设计出 类型安全 (type safe)、运行时高效 (runtime effective) 的程序。到现在,元编程已被广泛的应用于 C++ 的编程实践中。 元编程的主要难点 由于 C++ 语言设计层面上没有专门考虑元编程的相关问题,所以实际元编程难度较大。元编程的难点主要有四类:复杂性、实例化错误、代码膨胀、调试模板。
提到元这个字,你也许会想到元数据,元数据就是描述数据本身的数据,元类就是类的类,相应的元编程就是描述代码本身的代码,元编程就是关于创建操作源代码(比如修改、生成或包装原来的代码)的函数和类。 主要技术是使用装饰器、元类、描述符类。本文的主要目的是向大家介绍这些元编程技术,并且给出实例来演示它们是怎样定制化源代码的行为。 我们可以通过编程的方式来实现自定义的一些对象创建行为。 定一个类继承 type 类 A,然后让其他类的元类指向 A,就可以控制 A 的创建行为。 or float >>> c = Component('WIDGET', 'metal', 5) # Allowed: The inputs are valid 最后的话 关于 Python 的元编程 如果希望某一些类拥有某些相同的特性,或者在类定义实现对其的控制,我们可以自定义一个元类,然后让它类的元类指向该类。 如果希望实例的属性拥有某些共同的特点,就可以自定义一个描述符类。
所有用于读取、分析、转换或修改自身的程序都是元编程的例子。 然后,讨论了在Python中元编程的方法以及元编程如何简化某些特定类型的任务。 一点自我反省 如果你已经由一些Python编程经历,你可能知道那句话:Python中一切皆对象,类创建对象。 type 是 Python 中一个内建的元类,来控制Python中类的行为,我们可以通过继承自 type 来自定义一个元类。元类是Python中进行元编程的途径。 但是,在我们实现通过元类注入行为之前,让我们来看看Python中更常见的实现元编程的方法。 现在你知道了Python中如何编写元类。 总结 在这篇文章中,介绍了Python中实例,类和元类的关系。也展示了元编程的知识,这是一种操作代码的方法。
首先,我们且不说元编程是什么,他能做什么.我们先来谈谈生产力. 可以说,社区内,成功的web框架中基本没有不强依赖元编程技术的,框架做的工作越多,应用编写就越轻松. 那什么是元编程 元编程是写出编写代码的代码 试想以下,如果那些原本需要我们手动编写的代码,可以自动生成,我们是不是又更多的时间来做更加有意义的事情? 有些框架之所以开发效率高,其原因也是因为框架层面,把大量的需要重复编写的代码,采用元编程的方式给自动生成了. Java元编程的几种姿势 反射(reflection) 自省 我们要生成代码,我至少得知道我们现有的代码长什么样子吧?
C++ 模板以及模板元编程。 因此,模版元编程需要很多技巧,常常需要类型重定义、枚举常量、继承、模板偏特化等方法来配合,因此模版元编程比较复杂也比较困难。 C++ 模板元编程是“意外”功能,而不是设计的功能,这也是 C++ 模板元编程语法丑陋的根源。 元函数是模板元编程中用于操作处理元数据的“构件”,可以在编译期被“调用”,因为它的功能和形式和运行时的函数类似,而被称为元函数,它是元编程中最重要的构件。 所以,对于模板元编程,我们需要扬其长避其短,合理使用模板元编程。
zhuanlan.zhihu.com/p/426966480 其实复杂类型操作并非无迹可寻,本文就试图从元编程的角度挖掘一下类型系统的潜力,希望能够帮助你抓到一些思路和脉络。 元编程的基础是图灵完备的子系统,那么TypeScript类型系统是否是图灵完备的呢?答案当然是肯定的。 TypeScript类型系统的extends ? fromBinary<binaryAdd<[...count<10, 0>, 1], [...count<9, 0>, 1, 0]>>; 复制代码 小试牛刀 好了,上面的例子都比较简单,似乎缺少一些元编程的味道 ts=4.5… 好了,如果你看到这里,相信对TypeScript类型元编程已经有了初步的了解,接下来可以把它灵活运用到日常工作中啦。
魔 法 元类编程 在介绍元类编程前,我们先回顾下前面的内容,在之前的文章我们有了解过python的面对对象编程的基本实现机制就是魔法函数,而在python3中,新型类统一了类和类型的概念。 元 类 metaclass metaclass 直译过来就是元类 简单的解释就是: 当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。 但是如果我们想创建出类呢? 那就必须根据metaclass创建出类,所以:先定义metaclass,然后创建类就是元类编程。 应 用 一个单例模式 元类使类的创建行为发生了改变,当用户定义一个class Logger()时,Python解释器首先在当前类Logger的定义中查找metaclass,找到了,就使用Logger 就元类本身而言,它的作用是: 1.拦截类的创建 2.修改类 3.返回修改之后的类 使用元类还是有一些好处的: 1.意图更加明确。当然你的metaclass名字要起好 2.面向对象。
在Python中,类也是对象,因此我们可以通过元类来动态地创建和修改类。元类是一种用于创建类的类,它可以在类定义阶段拦截和修改类定义的过程,从而实现各种高级的功能,例如类型检查、代码生成、反射等。 元类通常继承自type类,通过重载__new__方法来实现类的创建和修改。__new__方法接收三个参数:cls、name和bases,分别表示元类本身、类名和基类。 下面是一个简单的元类示例,用于自动添加类的属性和方法:class MyMeta(type): def __new__(cls, name, bases, attrs): # 添加类的属性和方法 ) # 输出:1print(MyClass.y) # 输出:2MyClass().foo() # 输出:foo在上面的示例中,我们定义了一个名为MyMeta的元类,用于自动添加类的属性和方法 然后,我们使用元类创建名为MyClass的类,使用metaclass参数指定元类为MyMeta。在创建类时,元类会自动添加x、y和foo属性和方法到类中。
theme: condensed-night-purple 背景 首先还是来说下为什么出现元编程? 一个技术的出现肯定是不满足现状,那么元编程的出现是为了解决什么问题呢? 通过元数据描述类,变量,函数信息 什么是元编程 直接说定义:操作元数据的编程就是指元编程。 比如我们通过反射获取类,属性,方法的一些信息,进而操作他们这也叫元编程。 所以上面说到反射也算元编程的范畴。 但是这么说又太片面了,反射是通过程序获取数据,而元编程还包括通过数据获取程序。即“程序即是数据,数据即是程序”。 可以这么说元编程是更高阶的抽象,高阶函数用函数作为输入输出。而元编程用程序作为输入输出。 所以编译器承担了 解语法糖 的角色,编译器作为外部程序去操作这些语法糖(本质也是元数据)也叫作元编程 2.获取运行时数据(反射) 3.动态执行代码(目前无法做到) 元编程需要一定的学习成本,需要了解class
前言 通常我们创建类都是使用class 类名,但是小伙伴们有没有想过,类是由谁来创建的呢,python中常说的万物皆对象,对象是由类创建的,那类本身也可以看做是对象,类可以由元类type创建 type
元编程 元编程的主要思想是用程序在运行时写代码,再在运行时在编译代码。 元编程又被称为两级编程 (two-level programming),生成式编程 (generative programming) 或 模板元编程 (template metaprogramming) 反射是促进元编程的一种很有价值的语言特性,所以大多数支持反射的语言都支持元编程(类似字符串到代码,代码到字符串) c++的元编程,在编译期 参考:https://github.com/Binary-Song
1.1.propety动态属性 在面向对象编程中,我们一般把名词性的东西映射成属性,动词性的东西映射成方法。在python中他们对应的分别是属性self.xxx和类方法。 ") #总结 # __new__ 用来创建实例,在返回的实例上执行__init__,如果不返回实例那么__init__将不会执行 # __init__ 用来初始化实例,设置属性什么的 1.5.自定义元类 erek print(my_obj.say()) # i am derek print(my_obj.answer()) # i am baseclass 什么是元类 元类就是创建类的类,比如上面的type 在实际编码中,我们一般不直接用type去创建类,而是用元类的写法,自定义一个元类metaclass去创建 # 把User类创建的过程委托给元类去做,这样代码的分离性比较好