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 相关文章推荐
Python2/3中urllib库的一些常见用法
Dec 19 Python
python实现linux下抓包并存库功能
Jul 18 Python
python画折线图的程序
Jul 26 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
python字典的setdefault的巧妙用法
Aug 07 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
Python3分析处理声音数据的例子
Aug 27 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Python 创建TCP服务器的方法
Jul 28 Python
Python3如何在服务器打印资产信息
Aug 27 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
详解Python描述符的工作原理
Jun 11 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
慎用 somefunction.prototype 分析
2009/06/02 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
使用typescript构建Vue应用的实现
2019/08/26 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
python逆向入门教程
2018/01/15 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
python将视频转换为全字符视频
2019/04/26 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
Linux的主要特性
2014/10/06 面试题
工厂厂长岗位职责
2013/11/08 职场文书
单位提档介绍信
2014/01/17 职场文书
个人借款担保书
2014/04/02 职场文书
会计求职自荐信
2014/06/20 职场文书
2015年工商所工作总结
2015/05/21 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python