资源描述:
《(最新)【word】python的元类编程研究》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Python的元类编程研究Python的元类编程研究Python的元类编程研究Python的元类编程研究Python的元类编程研究Python的元类编程研究Python的元类编程研究电脑编程技巧与维护Pvthon的元类编程研究王丽(解放军第二十医院,乌鲁木齐830002)摘要:介绍了Python的背景,介绍了元类编程的基本概念和元类编程的必要性,重点介绍了Python中元类编程的两大基本方法,并依据这些方法编写了实例.关键词:元类;单态;PvthonResearchtheMetaclassProgrammingi
2、nPythonWANGLi(PeopleSLiberationArmy23Hospitals,Urumqi830002)Abstract:ThispaperfirstintroducesthebackgroundofPythonlanguage,thenintroducesthebasicconceptandnecessityofmetaelassprogramming.Afterthat,thepaperdescribesthetwobasicmethodsofmetaclassprogramminginPyt
3、honandwritesanexampletoshowhowtomakemetaclassprogramminginPython.Keywords:Metaclass;Singleton;Python1概述Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.Python具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行.Python被TIOBE评选为2010年年度编程语言,排名第6位.Python语言有一
4、个非常重要且有用的特性一元类编程,下面重点研究一下Python元类编程.2元类编程用来产生代码的程序,操纵代码的程序,在运行时创建和修改代码而非编程时,这种程序叫做元程序.而编写这种程序就叫做元编程.比如编译原理中用来生成词法分析器和语法分析器的lex和yacc.在Python里,类自身也是对象,就像其他对象是类的实例一样,类本身也不过是元类的一个实例,即对象是类的实例,类是元类的实例.type就是Python里的元类,像任何对象一样无论何时何地都可以实例化.用type进行类的动态创建称为元类编程.3必要性在非动
5、态语言中,例如Java,我们经常使用诸如反射之类的特性,来获取动态运行时编程上的更大灵活性,诸如动态导入不同的JAR包,DLL,或者在运行中获取类下面的方法,属性,通过字符串的描述来反射出真实的实例化对象.再结合设计模式的应用,最大限度地满足变化中的需求.例如某个权限验证系统可能在未来的需求变化中采取不同公司的密码卡系统,为了满足对未来可能出现的加密卡系统的变化,服务在设计之初就要考虑权限验证系统尽可能不变,从而摆脱对单一公司的依赖,所以需要采用反射机制,通过对于加密卡DLL名称的不同,LOAD进入不同的动态库文
6、件,甚至不同的函数调用名.而新的加密系统更换后,仅仅需要对配置文件做更改即可.i与,∥面涵与臻麓●非动态语言的反射极大地提高了程序的可扩展性,但是可以看到在非动态语言中也是有局限的,反射永远被局限到得到一个类的实例这一步,那么描述对象统一属性的类,是谁产生的呢?描述类的类称为:元类.即通过元类的动作的操作可以产生一个类.使用元编程最普通的情况就是创建具有动态生成的属性和方法的类.在Python(以及其他语言)中,类本身就是可以被传递和自省的对象,可以用类作为模板来生成对象,用元类作为模板来生成类.4实例假设需要动
7、态创建一个类并动态创建其方法,可以采用工厂模式结合setattr动态生成一个class:defclass_with_method(func):classmyclass:passsetattr(myclass,func.name,func)returnmyclassdefsayhello(self):print”helloworldA=class_with—method(say_hello)a=A0a.say_hello0但上面的方法不是元类编程,只是利用了Python的动态性,在某些场合可能不太适用,例如需要创建
8、一个类树(包括子类)的时候,上面的方法就无法处理,而且上面的方法无法指定创建类的名字,不够灵活.在Python中一切皆对象,一切都有类型,”class”和”type”之间本质上并无不同,类也是对象,它们的类型是type.采用Python的元类编程来解决这个问题.defsay_heno(self):作者简介:王丽(1980一),女,本科,助理工程师,研究方向:网页制作,动画