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中用Decorator来简化元编程的教程
Apr 13 Python
python实现同时给多个变量赋值的方法
Apr 30 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
基于Python log 的正确打开方式
Apr 28 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
python2.7实现爬虫网页数据
May 25 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
pytorch中的weight-initilzation用法
Jun 24 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
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php中文验证码实现方法
2015/06/18 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
Python装饰器基础详解
2016/03/09 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
Python如何生成xml文件
2020/06/04 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
加热夹克:RAVEAN
2018/10/19 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
研修第一天随笔感言
2014/02/15 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
个人委托函范文
2015/01/29 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
开学典礼致辞
2015/07/29 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL