python实现动态创建类的方法分析
本文实例讲述了python实现动态创建类的方法。分享给大家供大家参考,具体如下:
python作为动态语言,如何在运行时动态创建类呢(pythonCreatingclassesdynamically),这在编程时,有时候很有用处,动态生成类,给予相应的属性和方法。通常来说有如下两种方式:
- 1.根据条件,硬编码实现。
- 2.利用typemetaclass 来实现。
根据条件硬编码
defchoose_class(name): ifname=='foo': classFoo(object): pass returnFoo#返回一个类,而不是实例 else: classBar(object): pass returnBar MyClass=choose_class('foo') printMyClass#返回一个类,而不是实例 printMyClass()#创建一个实例
运行后,结果为:
<__main__.Fooobjectat0x00BA8370>
但其实这并不是那么动态,你还得在程序中写完整个class的定义。既然class是对象,也必定可以由什么东西创建出来。在python中,当你用class关键字的时候,python将自动创建这个object,有什么方法能手动创建呢,那就是type方法.这是一个很特殊的方法,能够创建一个类.type的语法如下:
type(nameoftheclass, tupleoftheparentclass(forinheritance,canbeempty), dictionarycontainingattributesnamesandvalues)
按照这个语法规则,做如下例子:
defecho_msg(self): printself.msg print'===dynamiccreateclass==='+'*'*50 MyClass=type('MyClass',(object,),{"a":123,"b":"summer","msg":"testmessage","echo_msg":echo_msg}) printMyClass.a myclass=MyClass() myclass.echo_msg() printmyclass.a,myclass.b print'===dynamiccreatesubclass==='+'*'*50 MySubClass=type('MySubClass',(MyClass,),{"c":"c-value"}) printMySubClass.c,MySubClass.a,MySubClass.b printissubclass(MySubClass,MyClass) mysubclass=MySubClass() mysubclass.echo_msg()
运行结果如下:
===dynamiccreateclass===**************************************************
123
testmessage
123summer
===dynamiccreatesubclass===**************************************************
c-value123summer
True
testmessage
这个例子利用 type创建了一个MyClass类,然后又创建了MySubClass继承了MyClass类,并绑定了属性,方法。MySubClass也绑定自己特有的属性,同时又继承了基类的属性,方法。
这样就实现了,在python中动态创建类,主要功臣就是type方法,为什么type有这么厉害,其最终原因是:type是metaclass,元类,用来创建类的类。打个比方:
Class=MetaClass() instance=Class()
什么是metaclass,又将怎么利用呢,后面的文章将详细讲解pythonmetaclass.
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。