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中的私有属性
Aug 21 Python
Python实现115网盘自动下载的方法
Sep 30 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
python使用mysql的两种使用方式
Mar 07 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
python psutil监控进程实例
Dec 17 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
PHP循环结构实例讲解
2014/02/10 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
javascript生成大小写字母
2015/07/03 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
python小技巧之批量抓取美女图片
2014/06/06 Python
深入浅析python定时杀进程
2016/06/06 Python
python制作websocket服务器实例分享
2016/11/20 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
Django 实现图片上传和下载功能
2020/12/31 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
社团活动总结模板
2014/06/30 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android