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 09 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
Django中信号signals的简单使用方法
Jul 04 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
python之语音识别speech模块
Sep 09 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
python中使用np.delete()的实例方法
Feb 01 Python
pycharm无法安装cv2模块问题
May 20 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
php实现word转html的方法
2016/01/22 PHP
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
详解K-means算法在Python中的实现
2017/12/05 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
网络工程师职业规划
2014/02/10 职场文书
高三复习计划
2015/01/19 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
小学运动会宣传稿
2015/07/23 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
python超详细实现完整学生成绩管理系统
2022/03/17 Python
Golang连接并操作MySQL
2022/04/14 MySQL