Python使用type动态创建类操作示例
作者:张行之 发布时间:2021-05-20 11:47:02
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/qq_33689414/article/details/78295672


猜你喜欢
- 可视化对于大家来说确实是有关的,因为确实是直观的,每一组大数据如果可以用可视化进行展示的话可以让大家豁然开朗。但在另外一些场景中,辅之以少量
- 本文实例为大家分享了微信小程序实现星星评价效果的具体代码,供大家参考,具体内容如下代码实现wxml文件<!--pages/evalua
- 在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用“”号或‘'括起来的字符或数值)、布尔型(使True或F
- 在sql语句中,如果查找某个文本字段值为空的可以用select * from 表 where 字段=''但是如果
- 以图像处理见长的微软Live实验室,最近发布了一款新作:Pivot。装完启动后的第一印象就是一款浏览器,和IE、FF、Chrome又不太一样
- 我们知道numpy的array是可以保存到文件的,一个常用的做法是通过to_file()保存到而进行.bin文件中,然后再通过from_fi
- 本文实例讲述了Python实现可自定义大小的截屏功能。分享给大家供大家参考,具体如下:蝈蝈这两天正忙着收拾家当去公司报道,结果做PHP的发小
- 第一部分:判断两张图片是否相同要查找重复的图片,必然绕不开判断两张图片是否相同。判断两张图片简单呀!图片可以看成数组,比较两个数组是否相等不
- 以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的。其他最为常用也是最为需要
- 本文介绍了网页运行代码框(runCode), 复制代码框(copyCode), 保存代码框(saveCode),的实现方法。javascri
- 在实现TextStraem的时候,找到判断文件编码的代码是VBS的,但是在JScript中是没有ASC等函数的,也不能对二进制数据进行处理,
- 其实网上已经有很多这样的类了,不过出于练手的目的还是自己仿照着写了一个。下面的代码放在一个名为UploadFile.class.php文件内
- 安装很简单pip install psutil官网地址为:https://pythonhosted.org/psutil/ (文档上有详细的
- testify在团队里推行单元测试的时候,有一个反对的意见是:写单元测试耗时太多。且不论这个意见对错,单元测试确实不应该太费时间。这时候,一
- 说到Javascript的类继承,就必然离不开原型链,但只通过原型链实现的继承有着不少缺陷。无参数类继承的问题先看一段示例代码,实现B继承于
- 同MongoDB,Redis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂!概述首先主服务器把数据变化记录到主日志,然后从服务
- 为了画个图,被numpy这个模块的安装真的折腾疯了!!!一直装不上,花了几个小时,看了网上的很多教程、方法发现总结得不是很全,这里总结一下,
- 假设需要打包的模块文件名为my.py,打包模块需要新建的一个脚本setip.py,然后在脚本下输入如下的内容:from disut
- 如下所示:>>> import numpy as np>>> x = np.array([1, 2])&
- 在工作中遇到把DataGrid中绑定的后台数据库数据展示给用户时把负数变为0的小问题,现在记录下来。例子中数据表示这个样子的:-------