本文实例讲述了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程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 陈慧娴.1989-永远是你的朋友(2024环球MQA-UHQCD限量版)【环球】【WAV+CUE】
- 何洛洛.2024-别叫醒我(EP)【光羽】【FLAC分轨】
- 林忆莲.1996-爱莲说2CD【华纳】【WAV+CUE】
- 黄妃.2005-红【亚律】【WAV+CUE】
- 刘美麟《同生》[FLAC/分轨][161.95MB]
- 群星《前途海量 电影原声专辑》[320K/MP3][106.26MB]
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】