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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
python实现查询苹果手机维修进度
Mar 16 Python
python实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
最基础的Python的socket编程入门教程
Apr 23 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
python开发之str.format()用法实例分析
Feb 22 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
python非标准时间的转换
Jul 25 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
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
PHP中soap的用法实例
2014/10/24 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
vue组件之Alert的实现代码
2017/10/17 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python中np是做什么的
2020/07/21 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
办公室主任主任岗位责任制
2014/02/11 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
男方婚礼答谢词
2015/01/20 职场文书
挂职个人工作总结
2015/03/05 职场文书
消防安全主题班会
2015/08/12 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
MySQL表字段时间设置默认值
2021/05/13 MySQL