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 isinstance函数介绍
Apr 14 Python
python实现读取命令行参数的方法
May 22 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
Python KMeans聚类问题分析
Feb 23 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python实现计算器功能
Oct 31 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
Pytest如何使用skip跳过执行测试
Aug 13 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
实用函数5
2007/11/08 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python实现telnet客户端的方法
2015/04/15 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
python中re模块知识点总结
2021/01/17 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
印度购物网站:TATA CLiQ
2017/11/23 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
判断单链表中是否存在环
2012/07/16 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
财务会计应届生求职信
2013/11/24 职场文书
房产销售经理职责
2013/12/20 职场文书
校园标语大全
2014/06/19 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
资产移交协议书
2016/03/24 职场文书