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中的对象,方法,类,实例,函数用法分析
Jan 15 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python实现队列的方法
May 26 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
python实现两个文件合并功能
Apr 01 Python
Python3实现腾讯云OCR识别
Nov 27 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
Django中FilePathField字段的用法
May 21 Python
python实现最短路径的实例方法
Jul 19 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 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
德生PL330测评
2021/03/02 无线电
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
Python中使用PDB库调试程序
2015/04/05 Python
pycharm远程调试openstack代码
2017/11/21 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
django自带调试服务器的使用详解
2019/08/29 Python
python计算n的阶乘的方法代码
2019/10/25 Python
pytorch 修改预训练model实例
2020/01/18 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
公司培训心得体会
2014/01/03 职场文书
支教自我鉴定
2014/01/18 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电