Python使用type动态创建类操作示例


Posted in Python onFebruary 29, 2020

本文实例讲述了Python使用type动态创建类操作。分享给大家供大家参考,具体如下:

使用type动态创建类
动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。

下面看一个例子:

# 定义一个Person类
class Person(object):
  def __init__(self):
    pass

  def say(self):
    print('say hello')

p = Person()
p.say()        # 输出 say hello

print(type(p))     # 输出 <class '__main__.Person'>

print(type(Person))   # 输出  <class 'type'>

运行结果:

say hello
<class '__main__.Person'>
<class 'type'>

我们发现,type(Person)输出的是<class 'type'>是type类型。

type()函数可以查看一个类型或变量的类型,Person是一个class(类),它的类型是type,而p是一个 Person的实例,它的类型是Person类。

我们说class(类)的定义是运行时动态创建的,而创建class(类)的方法就是使用type()函数。

eg:

# 定义一个方法
def func(self, word='hello'):
  print('say %s' % word)

Person = type('Person', (object,), dict(say=func))   # 通过type创建Person类

p = Person()

p.say()         # 输出 say hello

print(type(p))     # 输出 <class '__main__.Person'>

print(type(Person))   # 输出 <class 'type'>

运行结果:

say hello
<class '__main__.Person'>
<class 'type'>

type函数动态创建类,需要传入3个参数,分别是:

  • 第一个参数:class的名称
  • 第二个参数:继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法(tuple单元素写法(obj,));
  • 第三个参数:class的方法名称与函数绑定,这里我们把函数func绑定到方法名say上。

通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。

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

Python 相关文章推荐
python 参数列表中的self 显式不等于冗余
Dec 01 Python
Python psutil模块简单使用实例
Apr 28 Python
python实现SMTP邮件发送功能
Jun 16 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
python如何删除文件中重复的字段
Jul 16 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
给你一面国旗 教你用python画中国国旗
Sep 24 Python
python tkinter控件布局项目实例
Nov 04 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
利用python中集合的唯一性实现去重
Feb 11 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Python爬虫基础初探selenium
May 31 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 #Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 #Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 #Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 #Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 #Python
Python使用GitPython操作Git版本库的方法
Feb 29 #Python
如何使用python代码操作git代码
Feb 29 #Python
You might like
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP中文乱码解决方案
2015/03/05 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP实现递归无限级分类
2015/10/22 PHP
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python操作redis方法总结
2018/06/06 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
园林设计师自荐信
2013/11/18 职场文书
记帐员岗位责任制
2014/02/08 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
先进典型事迹材料
2014/12/29 职场文书
用人单位聘用意向书
2015/05/11 职场文书