python实现动态创建类的方法分析

本文实例讲述了python实现动态创建类的方法。分享给大家供大家参考,具体如下:

python作为动态语言,如何在运行时动态创建类呢(python Creating classes dynamically),这在编程时,有时候很有用处,动态生成类,给予相应的属性和方法。通常来说有如下两种方式:

  • 1. 根据条件,硬编码实现。
  • 2. 利用 type metaclass  来实现。

根据条件硬编码

def choose_class(name):

if name == 'foo':

class Foo(object):

pass

return Foo # 返回一个类,而不是实例

else:

class Bar(object):

pass

return Bar

MyClass = choose_class('foo')

print MyClass # 返回一个类,而不是实例

print MyClass() # 创建一个实例

运行后,结果为:

<class '__main__.Foo'>

<__main__.Foo object at 0x00BA8370>

但其实这并不是那么动态,你还得在程序中写完整个class的定义。既然class是对象,也必定可以由什么东西创建出来。在python中,当你用 class 关键字的时候,python将自动创建这个object, 有什么方法能手动创建呢,那就是 type 方法. 这是一个很特殊的方法,能够创建一个类. type 的语法如下:

type(name of the class,

tuple of the parent class (for inheritance, can be empty),

dictionary containing attributes names and values)

按照这个语法规则,做如下例子:

def echo_msg(self):

print self.msg

print '===dynamic create class==='+ '*'*50

MyClass = type('MyClass',(object,),{"a":123,"b":"summer","msg":"test message","echo_msg":echo_msg})

print MyClass.a

myclass = MyClass()

myclass.echo_msg()

print myclass.a,myclass.b

print '===dynamic create subclass==='+ '*'*50

MySubClass = type('MySubClass',(MyClass,),{"c":"c-value"})

print MySubClass.c,MySubClass.a,MySubClass.b

print issubclass(MySubClass, MyClass)

mysubclass = MySubClass()

mysubclass.echo_msg()

运行结果如下:

===dynamic create class===**************************************************

123

test message

123 summer

===dynamic create subclass===**************************************************

c-value 123 summer

True

test message

这个例子利用  type 创建了一个MyClass 类,然后又创建了 MySubClass 继承了MyClass 类,并绑定了属性,方法。MySubClass 也绑定自己特有的属性,同时又继承了基类的属性,方法。

这样就实现了,在python 中动态创建类,主要功臣就是 type 方法,为什么type 有这么厉害,其最终原因是:type 是 metaclass ,元类,用来创建类的类。打个比方:

Class=MetaClass()

instance=Class()

什么是 metaclass ,又将怎么利用呢,后面的文章将详细讲解 python metaclass.

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

以上是 python实现动态创建类的方法分析 的全部内容, 来源链接: utcz.com/z/353838.html

回到顶部