metaclass 了解一下】的更多相关文章

一个类作为metaclass的时候,我们需要重写它的__new__方法,这个方法的参数包括要创建class object的 metaclass,类名,父类集合,类成员 class MyMetaclass(type): def __new__(metaclz,name,bases,attrs): print("create new class ",metaclz,name) return type.__new__(metaclz, name, bases, attrs) 这样在调用__n…
提前说明: class object  指VM中的class 对象,因为python一切对象,class在VM也是一个对象,需要区分class对象和 class实例对象. class instance 指 某个class的 instance ,这个instance 的 ob_type指向某个 class object python中 类对象有两种相关的class需要我们特别关注: 1.metaclass: metaclass关乎class object(不是 class instance)的创建…
几个基本的概念: id,id的定义是,typedef struct objc_object { Class isa;} *id; id是指向struct objc_object的一个指针.这个意思是,id是一个指向任何一个继承了NSObject的对象,可以指向任意一个NSObject子类的对象.需要注意的是id是一个指针,所以在使用id的时候不需要加星号. SELSEL的定义是,typedef struct objc_selector *SEL;是指向 struct objc_selector的…
Python魔法 - MetaClass metaclass The class of a class. Class definitions create a class name, a class dictionary, and a list of base classes. The metaclass is responsible for taking those three arguments and creating the class. Most object oriented pro…
元类一般用于创建类.在执行类定义时,解释器必须要知道这个类的正确的元类.解释器会先寻找类属性__metaclass__,如果此属性存在,就将这个属性赋值给此类作为它的元类.如果此属性没有定义,它会向上查找父类中的__metaclass__.如果还没有发现__metaclass__属性,解释器会检查名字为__metaclass__的全局变量,如果它存在,就使用它作为元类.否则, 这个类就是一个传统类,并用 types.ClassType 作为此类的元类. 在执行类定义的时候,将检查此类正确的(一般…
首先看下面的代码: # coding: utf-8 class Test(object): pass print Test.__class__ # type print Test.__base__ # object t = Test() print t.__class__ # Test print t.__class__.__class__ # type print Test.__class__.__class__.__class__ # type a = type('Foo', (), {})…
理解python metaclass使用技巧与应用场景分析       参考: decorator与metaclass:http://jfine-python-classes.readthedocs.org/en/latest/index.html 深入理解python中的metaclass: http://blog.jobbole.com/21351/ 廖雪峰:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb49318210…
http://cizixs.com/2015/08/30/metaclass-in-python 动态类型也是类型 python 是一种动态类型语言,换句话说每个变量可以在程序里任何地方改变它的类型.想要获取变量的类型信息,可以使用 type: >>> a = 2 >>> type(a) int >>> a = '1' >>> type(a) str >>> type(str) type >>> t…
本文由 伯乐在线 - bigship 翻译 英文出处:stackoverflow 译文:http://blog.jobbole.com/21351/ 译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了9…
本来想自己写这篇文章的,可当我读了这篇文章http://blog.jobbole.com/21351/,我打消了这个念头,因为肯定写的没有人家的好,说的通俗易懂,面面俱到.就厚着面皮修改下格式,测试下代码,当作原创了,面皮貌似有点厚啊....有点长,需要花点耐心. 译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际…
from stack overflow:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python Classes as objects Before understanding metaclasses, you need to master classes in Python. And Python has a very peculiar idea of what classes are, borrowed f…
metaClass 实现动态改变对象的能力,这点特别像python(metaClass),Python中类(不是元类)的概念借鉴于Smalltalk groovy demo: class Person { String name } // 添加自我介绍的行为 Person.metaClass.introduce << {println "I'm $name"} // 添加性别属性,默认为男(Male) Person.metaClass.sex = "Male&qu…
比较简单的一篇英文,重点是讲解meta-class.翻译下,加深理解. 原文标题:What is a meta-class in Objective-C? 原文地址:http://www.cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html 本篇将会探讨一个在Objective-C中相对陌生的概念 -- meta-class.OC中的每一个类都会有一个与之相关联的meta class,但是你却几乎永远也不会直接使用到,它…
译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了985点的赞同点数,更有人评论说这段回复应该加入到Python的官方文档中去.而e-satis同学本人在Stack Overflow中的声望积分也高达6…
Classes as objects 首先,在认识metaclass之前,你需要认识下python中的class.python中class的奇怪特性借鉴了smalltalk语言.大多数语言中,classes仅仅是用于描述怎样创建一个对象的代码端.在某种程度上说,python中的class也是这样的.   >>> class ObjectCreator(object): ... pass ... >>> my_object = ObjectCreator() >&g…
比较简单的一篇英文,重点是讲解meta-class.翻译下,加深理解. 原文标题:What is a meta-class in Objective-C? 原文地址:http://www.cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html 本篇将会探讨一个在Objective-C中相对陌生的概念 -- meta-class.OC中的每一个类都会有一个与之相关联的meta class,但是你却几乎永远也不会直接使用到,它…
最近了解了一下python的metaclass,在学习的过程中,把自己对metaclass的理解写出来和大家分享. 首先, metaclass 中文叫元类,这个元类怎么来理解呢.我们知道,在Python中,一切都是对象.我们定义一个类,然后实例化,得到了一个类的实例对象.我们可以把类理解成创建实例对象的模板.其实,这个模板,也就是类本身,也是一个对象.既然类也是对象,那么我们就可以对他进行很多操作.比如,把类作为函数的参数,创建类的引用等等.那么创建类的模板,就是元类. 在Python中,我们很…
推荐+收藏:深刻理解Python中的元类(metaclass) 做一些笔记学习学习: 在大多数编程语言中,类就是用来描述如何生成一个对象的代码段,在Python中类也是一个对象,这个(类)对象自身拥有创建对象(类实例)的能力. 因为它的本质是一个对象: 可以将它赋值给一个变量 可以拷贝它 增加属性 作为参数进行传递 可以在运行时动态地创建他们,可以在函数中创建类,只需要使用class关键字即可 当使用class关键字的时候,Python解释器会自动地创建这个对象,Python还提供了手动处理的方…
非常详细的一篇深入讲解Python中metaclass的文章,感谢伯乐在线-bigship翻译及作者,转载收藏. 本文由 伯乐在线 - bigship 翻译.未经许可,禁止转载!英文出处:stackoverflow.欢迎加入翻译组. 译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及…
本人Java程序员一枚,这几天闲来无事就自学了下Python,学到Metaclass感觉有点迷惑,就在网上查相关资料,在栈溢出(stackoverflow)网站上看到一个关于metaclass的回答,感觉回答很不错,解决的自己的疑惑,闲的蛋疼就翻译了一下.原贴写的很好,尤其看得时候感觉循序渐进,由浅入深,很适合我这种小白用户.但翻的时候才感觉,自己真是闲的蛋疼,回答简直太长了,无奈都翻了这么多,不能半途而非,咬牙翻完,希望能帮到其他道友.贴上原文地址:https://stackoverflow.…
关于Python2.x中metaclass这一黑科技,我原以为我是懂的,只有当被打脸的时候,我才认识到自己too young too simple sometimes native. 为什么之前我认为自己懂了呢,因为我阅读过stackoverflow上的<what-is-a-metaclass-in-python>这一神作(注意,本文中专指e-satis的回答),在伯乐在线上也有不错的翻译<深刻理解Python中的元类(metaclass)>.而且在实际项目中也使用过metacla…
一.知识储备 #exec:三个参数 #参数一:字符串形式的命令 #参数二:全局作用域(字典形式),如果不指定,默认为globals() #参数三:局部作用域(字典形式),如果不指定,默认为locals() exec的参数格式 #可以把exec命令的执行当成是一个函数的执行,会将执行期间产生的名字存放于局部名称空间中 g={ 'x':1, 'y':2 } l={} exec(''' global x,z x=100 z=200 m=300 ''',g,l) print(g) #{'x': 100,…
一:知识储备 exec exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为locals() exec的应用: #可以把exec命令的执行当成是一个函数的执行,会将执行期间产生的名字存放于局部名称空间中 g={ 'x':1, 'y':2 } l={} exec(''' global x,z x=100 z=200 m=300 ''',g,l) print(g) #{'x': 100,…
1: type() 我们知道动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Person的class: class Person(object): def name(self, name='Kaven'): print('My name is: %s.' % name) p = Person() p.name() print(type(Person)) print(type(p)) 输出: My name is: Kaven. <c…
python元类是比较难理解和使用的.但是在一些特定的场合使用MetaClass又非常的方便.本文本着先拿来用的精神,将对元类的概念作简要介绍,并通过深入分析一个元类的例子,来体会其功能,并能够在实际需要时灵活运用. 首先,先了解一下必要的知识点. 1. 函数__new__和__init__ 元类的实现可以使用这两个函数.在创建类的过程中会调用这两个函数,类定义中这两个函数可有可无.具体可参照官网 Basic customization 先来简要说明一下两者的区别: __new__ 是在__in…
简介:MetaClass是Mybatis对类级别的元信息的封装和处理,通过与属性工具类的结合, 实现了对复杂表达式的解析,实现了获取指定描述信息的功能 public class MetaClass { private ReflectorFactory reflectorFactory; private Reflector reflector; /** * 构造函数私有 */ private MetaClass(Class<?> type, ReflectorFactory reflectorF…
Python 面向对象高阶-----metaclass 前言 类也是对象,既然类是对象,那就自然是某个东西的实例化,这个东西就是type 首先看下type是怎么回事 type type最常用的方法就是查看类型,这只是他的基础用法罢了 >>> print(type(1)) <type 'int'> >>> ")) <type 'str'> >>> print(type(ObjectCreator)) <type '…
(一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的类 class Trick(object): pass 当python在执行带class语句的时候,会初始化一个类对象放在内存里面.例如这里会初始化一个Trick对象 这个对象(类)自身拥有创建对象(通常我们说的实例,但是在python中还是对象)的能力. 为了方便后续理解,我们可以先尝试一下在新式…
今天在学习<python3爬虫开发实战>中看到这样一段代码3 class ProxyMetaclass(type): def __new__(cls, name, bases, attrs): count = 0 attrs['__CrawlFunc__'] = [] for k, v in attrs.items(): if 'crawl' in k: attrs['__CrawlFunc__'].append(k) count += 1 attrs['__CrawlFunc__'] = c…
本节内容 1.概述 2.类的起源 3.__new__方法 4.__metaclass__方法 一.概述 前面我们学习了大篇幅的关于类,通过类创建对象,那我们想知道这个类到底是怎么产生的呢?它的一切来源是什么?还有对象,对象是通过什么方法创建的,现在我们一头雾水,行的,下面我们就来揭开类的面纱,看看类和对象到底是怎么创建的,通过什么创建的. 二.类的起源 2.1 传统创建类 1 2 3 4 5 class Foo(object):     def __init__(self,name):     …