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 django实现简单的邮件系统发送邮件功能
Jul 14 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
Python实现的求解最大公约数算法示例
May 03 Python
python xpath获取页面注释的方法
Jan 14 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
使用Python实现跳帧截取视频帧
May 31 Python
python系列 文件操作的代码
Oct 06 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
Python新手学习标准库模块命名
May 29 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判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
python3 深浅copy对比详解
2019/08/12 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
总经理秘书的岗位职责
2013/12/27 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
实名检举信范文
2015/03/02 职场文书
给朋友的道歉短信
2015/05/12 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL
python中的getter与setter你了解吗
2022/03/24 Python