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中一些自然语言工具的使用的入门教程
Apr 13 Python
详细解析Python中的变量的数据类型
May 13 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
Flask框架模板继承实现方法分析
Jul 31 Python
python关闭占用端口方式
Dec 17 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
Python解释器及PyCharm工具安装过程
Feb 26 Python
Python 如何查找特定类型文件
Aug 17 Python
python中二分查找法的实现方法
Dec 06 Python
python实现杨辉三角的几种方法代码实例
Mar 02 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 Python
Pandas搭配lambda组合使用详解
Jan 22 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的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
php中memcache 基本操作实例
2015/05/17 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
jquery.validate使用攻略 第三部
2010/07/01 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
Javascript复制实例详解
2016/01/28 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
javascript中的隐式调用
2018/02/10 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
python实现感知器
2017/12/19 Python
Python读写zip压缩文件的方法
2018/08/29 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
自荐信的两点禁忌
2013/10/30 职场文书
《王二小》教学反思
2014/02/27 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
商铺消防安全责任书
2014/07/29 职场文书
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
分享Python异步爬取知乎热榜
2022/04/12 Python