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 ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python标准库与第三方库详解
Jul 22 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Python可以实现栈的结构吗
May 27 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Python import模块的缓存问题解决方案
Jun 02 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/09 PHP
php开发文档 会员收费1期
2012/08/14 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
js location.replace与location.reload的区别
2010/09/08 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
python实现打砖块游戏
2020/02/25 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
WiFi云数码相框:Nixplay
2018/07/05 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
专科应届生求职信
2013/11/24 职场文书
年度考核评语
2014/01/19 职场文书
学生操行评语大全
2014/04/24 职场文书
公路绿化方案
2014/05/12 职场文书
病媒生物防治方案
2014/05/13 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
委托书格式要求
2015/01/28 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL