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多重继承新算法C3介绍
Sep 28 Python
Python中的zipfile模块使用详解
Jun 25 Python
python搭建微信公众平台
Feb 09 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Python使用gRPC传输协议教程
Oct 16 Python
django解决跨域请求的问题
Nov 11 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python3基于print打印带颜色字符串
Jul 06 Python
详解Python 最短匹配模式
Jul 29 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 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
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
php中大括号作用介绍
2012/03/22 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
php之可变变量的实例详解
2017/09/12 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
继续学习javascript闭包
2015/12/03 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python中正则表达式详解
2017/05/17 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Python阶乘求和的代码详解
2020/02/14 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
接待员岗位职责
2015/02/13 职场文书
见习期个人总结
2015/03/05 职场文书
离婚案件被告代理词
2015/05/23 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
Python基础 括号()[]{}的详解
2021/11/07 Python