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


Posted in Python onJune 25, 2019

本文实例讲述了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制作Windows系统服务
Mar 25 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Python的垃圾回收机制详解
Aug 28 Python
Python中*args和**kwargs的区别详解
Sep 17 Python
DataFrame.to_excel多次写入不同Sheet的实例
Dec 02 Python
Pytorch之卷积层的使用详解
Dec 31 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
python调用百度API实现人脸识别
Nov 17 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
python pandas写入excel文件的方法示例
Jun 25 #Python
python多线程http压力测试脚本
Jun 25 #Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 #Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 #Python
如何使用Python标准库进行性能测试
Jun 25 #Python
python绘制评估优化算法性能的测试函数
Jun 25 #Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 #Python
You might like
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
jquery中this的使用说明
2010/09/06 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
Angular4表单验证代码详解
2017/09/03 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python3计算三角形的面积代码
2017/12/18 Python
Python冲顶大会 快来答题!
2018/01/17 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
如何通过python计算圆周率PI
2020/11/11 Python
super关键字的用法
2012/04/10 面试题
大二自我鉴定范文
2013/10/05 职场文书
物流专业自荐信
2014/05/23 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
党校培训学习心得体会
2016/01/06 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书