众所周知:type()函数可以查看变量的类型:

先看一个简单的列子来看一下type查看变量类型

class Animal():passa=Animal()
print(type(a))
print(type(Animal))<class '__main__.Animal'>
<class 'type'>

可以发现我定义的Animal类本身的类型是 type

从 Python 解释器的角度来看,当程序使用 class 定义 Animal 类时,也可理解为定义了一个特殊的对象(type 类的对象),并将该对象赋值给 Animal 变量。因此,程序使用 class 定义的所有类都是 type 类的实例。

实际上 Python 完全允许使用 type() 函数(相当于 type 类的构造器函数)来创建 type 对象,又由于 type 类的实例就是类,因此 Python 可以使用 type() 函数来动态创建类

正常情况下类的创建及实例化调用

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Test():name = "Test"def hello(self):print("hello world")t = Test()
t.hello()#Test.hello(t)
print(t.name)

而使用type()动态创建类:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def hello(self):self.name = 10print("hello world")t = type("hello",(),{"a":1,"hello":hello})
print(t)
T = t()
print(T.a)
T.hello()
print(T.name)<class '__main__.hello'>
1
hello world
10

所以type是可以实现动态创建类的,其实python中一切都是对象,类也是对象;只不过是一种特殊的对象,是type的对象

python中类创建的本质:

我们使用class创建类,当你使用class关键字时,Python解释器自动创建这个对象。而底层其实使用的是type函数(type函数也可以查看实例所属类型)来创建类的。所以我们可以直接使用type()函数来手动实现动态创建类。

当type()只有一个参数时,其作用就是返回变量或对象的类型
当type()有三个参数时,其作用就是创建类对象:

  • 第一个参数:name表示类名称,字符串类型
  • 第二个参数:bases表示继承对象(父类),元组类型,单元素使用逗号
  • 第三个参数:attr表示属性,这里可以填写类属性、类方式、静态方法,采用字典格式,key为属性名,value为属性值

总结:

通过type添加的属性是类属性,并不是实例属性

通过type可以给类添加普通方法,静态方法,类方法,效果跟class一样

type创建类的效果,包括继承等的使用性质和class创建的类一样。本质class创建类的本质就是用type创建。所以可以说python中所有类都是type创建的。

对元类的理解与注意事项

元类就是类的类,python中函数type实际上是一个元类。type就是Python在背后用来创建所有类的元类。Python中所有的东西——都是对象。这包括整数、字符串、函数以及类。它们全部都是对象,而且它们都是从一个类创建而来,这个类就是type。type就是Python的内建元类,当然了,也可以创建自己的元类。

python查看对象所属类型既可以用type函数,也可以用对象自带的__class__属性。

以下代码验证:任何对象最终的所属类都是type。 type是所有类的创造者。

num = 1
print(num.__class__)
print(num.__class__.__class__)<class 'int'>
<class 'type'>

Python中type()详解:动态创建类相关推荐

  1. Python中type的使用和元类的理解

            "元类就是深度的魔法,99%的用户应该根本不必为此操心.如果你想搞清楚究竟是否需要用到元类,那么你就不需要它.那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需 ...

  2. python中getattr详解

    python中getattr详解 目录 getattr详解 前言 一.消除if-else 二. 反射机制 三.getattr 详解 总结 getattr详解 前言 这两天在优化腾讯云迁移平台(Smar ...

  3. Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)

    文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...

  4. Python中dict详解

    python3.0以上,print函数应为print(),不存在dict.iteritems()这个函数. 在python中写中文注释会报错,这时只要在头部加上# coding=gbk即可 #字典的添 ...

  5. python中getattr详解_Python类中方法getitem和getattr详解

    请分享高手帮小编详解一下Python中的getattr内置函数没明白这个内置函数得意思.麻烦帮小编讲解一下. 其实这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以 ...

  6. python中configparser详解_Python中的ConfigParser模块使用详解

    1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该sect ...

  7. python中闭包详解

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...

  8. python中self做前缀_python 创建类和为什么类方法中self形参必不可少?

    我们观察到在类中定义方法时,都带有self形参,为何必须在方法中定义形参self呢? 因为Python调用方法创建类实例时,将自动传入实参self.每个与类相关联的方法调用都自动传递实参self,他是 ...

  9. python中getattr详解_Python中如何使用getattr()函数

    Python中如何使用getattr()函数 发布时间:2020-08-12 14:57:55 来源:亿速云 阅读:74 作者:小新 这篇文章将为大家详细讲解有关Python中如何使用getattr( ...

  10. python中ttk详解_Python 中的Property 动态属性和特性详解

    在Python开发时,考虑到安全性,我们会通过使用 '__' 定义私有属性,以限制类外或者子类都不能直接进行访问.操作.但同时,这些私有属性并不是一成不变的,所以我们还需要提供私有属性的对外操作方式. ...

最新文章

  1. linux 终端什么意思,请问我的终端显示的是什么意思
  2. python的numpy(array)
  3. 2019前沿信息科技创新论坛成功举办
  4. fatal error C1021: 无效的预处理器命令“warning”
  5. python如何启动前端_python- 前端进阶
  6. 802.11协议之BA/BAR帧
  7. 初探 MySQL 的 Binlog
  8. java jsch 密钥登陆_我们可以使用JSch进行基于SSH密钥的通信吗?
  9. 初识jQuery(适合初学者哟.........)
  10. angularjs中的分页指令
  11. 盘点大数据的十大发展方向,Scale-out将成主流
  12. 使用 Flomesh 强化 Spring Cloud 服务治理
  13. LNMP环境搭建 centos7 nginx1.12 mysql5.6 php7
  14. MOSS 2010:Visual Studio 2010开发体验(23)——编写自定义的BCS连接器
  15. 数学建模之相关分析分类与总结
  16. IDEA设置背景颜色
  17. 教你破解已转换为EXE格式的Bat
  18. 本机ip地址、本机DNS查询工具地址
  19. Linux下7z文件解压
  20. 不要嘀咕自己对新环境的适应能力

热门文章

  1. 寄存器自动化配置通用案例
  2. Linux文本处理三剑客之awk
  3. httpsendrequest的head怎么用string写_商品广告语用怎么写?男人篇
  4. 华为云客户端_效果图云渲染已成趋势,云渲染如何选择?
  5. 【ABAP】报表进度提示
  6. ALV输出设置默认布局
  7. ora 12541无监听程序
  8. PM到底做什么(What Do Product Managers Do?)
  9. 几家OA厂商介绍及产品特点总结
  10. OO实现ALV TABLE 二:ALV显示的三种形式