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的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
复习Python中的字符串知识点
Apr 14 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
flask入门之表单的实现
Jul 18 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
通过shell+python实现企业微信预警
Mar 07 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
在vscode中启动conda虚拟环境的思路详解
Dec 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
cache_lite试用
2007/02/14 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python with (as)语句实例详解
2020/02/04 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
基于Python实现粒子滤波效果
2020/12/01 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
拉歌口号大全
2014/06/13 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
客房部经理岗位职责
2015/02/02 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书