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查看多台服务器进程的脚本分享
Jun 11 Python
Python科学计算环境推荐——Anaconda
Jun 30 Python
python通过正则查找微博@(at)用户的方法
Mar 13 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python简单获取二维数组行列数的方法示例
Dec 21 Python
Python获取网段内ping通IP的方法
Jan 31 Python
Python中一般处理中文的几种方法
Mar 06 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
为什么称python为胶水语言
Jun 16 Python
python openCV实现摄像头获取人脸图片
Aug 20 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 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中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
php检测文件编码的方法示例
2014/04/25 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
python算法表示概念扫盲教程
2017/04/13 Python
django实现日志按日期分割
2020/05/21 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
python爬取youtube视频的示例代码
2021/03/03 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
.NET面试题:什么是反射
2016/09/30 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
幼儿园教师请假制度
2014/01/16 职场文书
医生进修自我鉴定
2014/01/19 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
2014年维修工作总结
2014/11/22 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
关于MySQL中explain工具的使用
2023/05/08 MySQL