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对象转JSON字符串的方法
Apr 27 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
python爬虫爬取网页表格数据
Mar 07 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
python实现布隆过滤器及原理解析
Dec 08 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
python中altair可视化库实例用法
Jan 26 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
用python 制作图片转pdf工具
2015/01/30 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python 常用string函数详解
2016/05/30 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
python re模块常见用法例举
2021/03/01 Python
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
最新的大学生找工作自我评价
2013/09/29 职场文书
音乐系毕业生自荐信
2013/10/27 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
雨花台导游词
2015/02/06 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
MySQL transaction事务安全示例讲解
2022/06/21 MySQL