Python基于内置函数type创建新类型


Posted in Python onOctober 22, 2020

英文文档:

class type(object)

class type(name, bases, dict)

With one argument, return the type of an object. The return value is a type object and generally the same object as returned by object.__class__.

The isinstance() built-in function is recommended for testing the type of an object, because it takes subclasses into account.

With three arguments, return a new type object. This is essentially a dynamic form of the class statement. The namestring is the class name and becomes the __name__ attribute; the bases tuple itemizes the base classes and becomes the __bases__ attribute; and the dict dictionary is the namespace containing definitions for class body and is copied to a standard dictionary to become the __dict__ attribute.

返回对象的类型,或者根据传入的参数创建一个新的类型

说明:

1. 函数只传入一个参数时,返回参数对象的类型。 返回值是一个类型对象,通常与对象.__ class__返回的对象相同。

#定义类型A
>>> class A:
  name = 'defined in A'

#创建类型A实例a
>>> a = A()

#a.__class__属性
>>> a.__class__
<class '__main__.A'>

#type(a)返回a的类型
>>> type(a)
<class '__main__.A'>

#测试类型
>>> type(a) == A
True

 2. 虽然可以通过type函数来检测一个对象是否是某个类型的实例,但是更推荐使用isinstance函数,因为isinstance函数考虑了父类子类间继承关系。

#定义类型B,继承A
>>> class B(A):
  age = 2

#创建类型B的实例b
>>> b = B()

#使用type函数测试b是否是类型A,返回False
>>> type(b) == A
False

#使用isinstance函数测试b是否类型A,返回True
>>> isinstance(b,A)
True

 3. 函数另一种使用方式是传入3个参数,函数将使用3个参数来创建一个新的类型。其中第一个参数name将用作新的类型的类名称,即类型的__name__属性;第二个参数是一个元组类型,其元素的类型均为类类型,将用作新创建类型的基类,即类型的__bases__属性;第三个参数dict是一个字典,包含了新创建类的主体定义,即其值将复制到类型的__dict__属性中。

#定义类型A,含有属性InfoA
>>> class A(object):
  InfoA = 'some thing defined in A'

#定义类型B,含有属性InfoB
>>> class B(object):
  InfoB = 'some thing defined in B'

#定义类型C,含有属性InfoC
>>> class C(A,B):
  InfoC = 'some thing defined in C'

#使用type函数创建类型D,含有属性InfoD
>>> D = type('D',(A,B),dict(InfoD='some thing defined in D'))

#C、D的类型
>>> C
<class '__main__.C'>
>>> D
<class '__main__.D'>

#分别创建类型C、类型D的实例
>>> c = C()
>>> d = D()

#分别输出实例c、实例b的属性
>>> (c.InfoA,c.InfoB,c.InfoC)
('some thing defined in A', 'some thing defined in B', 'some thing defined in C')
>>> (d.InfoA,d.InfoB,d.InfoD)
('some thing defined in A', 'some thing defined in B', 'some thing defined in D')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python yield使用方法示例
Dec 04 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
python多线程方式执行多个bat代码
Jun 07 Python
利用Python开发实现简单的记事本
Nov 15 Python
用pickle存储Python的原生对象方法
Apr 28 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Python闭包和装饰器用法实例详解
May 22 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 Python
python使用ctypes库调用DLL动态链接库
Oct 22 #Python
Python通过len函数返回对象长度
Oct 22 #Python
python 还原梯度下降算法实现一维线性回归
Oct 22 #Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 #Python
python处理写入数据代码讲解
Oct 22 #Python
基于Python爬取股票数据过程详解
Oct 21 #Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 #Python
You might like
PHP中函数内引用全局变量的方法
2008/10/20 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
FCK调用方法..
2006/12/21 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
python实现读取命令行参数的方法
2015/05/22 Python
深入理解Python3 内置函数大全
2017/11/23 Python
django用户登录和注销的实现方法
2018/07/16 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
青安岗事迹材料
2014/05/14 职场文书
低碳环保演讲稿
2014/08/28 职场文书
信用卡工资证明范本
2014/10/17 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL