Pythontype()函数:动态创建类

我们知道,type()函数属于Python内置函数,通常用来查看某个变量的具体类型。其实,type()函数还有一个更高级的用法,即创建一个自定义类型(也就是创建一个类)。

type()函数的语法格式有2种,分别如下:

type(obj)
type(name, bases, dict)12复制代码类型:[python]

以上这2种语法格式,各参数的含义及功能分别是:

第一种语法格式用来查看某个变量(类对象)的具体类型,obj表示某个变量或者类对象。

第二种语法格式用来创建类,其中name表示类的名称;bases表示一个元组,其中存储的是该类的父类;dict表示一个字典,用于表示类内定义的属性或者方法。

对于使用type()函数查看某个变量或类对象的类型,由于很简单,这里不再做过多解释,直接给出一个样例:

#查看 3.4 的类型print(type(3.4))#查看类对象的类型class CLanguage:
 passclangs = CLanguage()
print(type(clangs))1234567复制代码类型:[python]

输出结果为:

<class 'float'>
<class '__main__.CLanguage'>12复制代码类型:[python]

这里重点介绍type()函数的另一种用法,即创建一个新类,先来分析一个样例:

#定义一个实例方法def say(self):
 print("我要学 Python!")#使用 type() 函数创建类CLanguage = type("CLanguage",(object,),dict(say = say, name = "开课吧广场"))#创建一个 CLanguage 实例对象clangs = CLanguage()#调用 say() 方法和 name 属性clangs.say()
print(clangs.name)12345678910复制代码类型:[python]

注意,Python元组语法规定,当(object,)元组中只有一个元素时,最后的逗号(,)不能省略。

可以看到,此程序中通过type()创建了类,其类名为CLanguage,继承自objects类,且该类中还包含一个say()方法和一个name属性。

有读者可能会问,如何判断dict字典中添加的是方法还是属性?很简单,如果该键值对中,值为普通变量(如"C语言中文网"),则表示为类添加了一个类属性;反之,如果值为外部定义的函数(如say()),则表示为类添加了一个实例方法。

运行上面的程序,其输出结果为:

我要学 Python!
开课吧广场12复制代码类型:[python]

可以看到,使用type()函数创建的类,和直接使用class定义的类并无差别。事实上,我们在使用class定义类时,Python解释器底层依然是用type()来创建这个类。

(0)

相关推荐

  • python字典

    近些年最长的五一小长假结束了,结束了,结束了...... 来一张照片抚慰一下想出去浪的心...... 字典在python中也是一种常用的数据类型. 它是一种可变容器模型,可用来存储任意类型的对象,如: ...

  • 【Python面试】 说说Python中有几种数据类型?​

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  • Python语言学习之字母C开头函数使用集锦:count用法之详细攻略

    Python语言学习之字母C开头函数使用集锦:count用法之详细攻略 count用法 list.count函数的用法 list=['America', 'America', '山东', '山东', ...

  • 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  • Python中关于eval函数与ast.literal

    eval函数在Python中做数据类型的转换还是很有用的.它的作用就是把数据还原成它本身或者是能够转化成的数据类型.那么eval和ast.literal_val()的区别是什么呢?本文将大家介绍关于P ...

  • 什么是函数模板、类模板?怎么做到的?

    独 家 XILINX赛灵思全系列优势供应 XCVU9P-2FLGB2104I   200PCS XCVU9P-2FLGA2104I   500PCS XCVU13P-2FLGB2104I  300PC ...

  • C 对象和实例的区别,以及用new和不用new创建类对象区别

    起初刚学C 时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题.当然这都是跟new的用法有关的.new ...

  • 高考函数与导数类压轴题的6大模型与23种考法总结!压轴题不只学霸才能解~

    只有学霸才会解'压轴题'嘛? 在高考数学里,这个问题的答案一定是否定的,数学压轴题十之有九是对函数与导数问题的考查,此类题型确实不简单,但极具规律性,属于难,但是容易备考的题型. 今天车车帮你整理好了 ...

  • 反比例函数:11类模型梳理

    一.反比例函数的基本性质 1.反比例函数图象是由两条曲线组成的双曲线,双曲线向坐标轴无限延伸,但不能与坐标轴相交: 2.k的正负性,决定双曲线大致位置及y随x的变化情况: 3.双曲线上的点是关于中心对 ...

  • 17个文本函数的七类用法

    一.文本链接篇 1.连字符:& 公式:=B3&C3 2.连续区域合并 PHONETIC函数, 用法:=PHONETIC(需要合并的区域) 公式:=PHONETIC(A2:C2) 3. ...

  • VB 函数 CallByName 的一些用法 (函数动态调用,回调函数)

    VB  函数  CallByName (函数动态调用,回调函数) 的一些用法 最近编程,要用到函数指针来动态地调用函数,在C 语言里很容易实现,用函数指针就行了. VB里就没有这么方便了,查阅相关资料 ...

  • Excel 2016︱函数动态图表

    函数动态图表 图 25-106 展示了一年 4 个季度的销售数据,用户可以把数据验证与函数结合起来使用制作动态柱形图. 步 骤 1 选择 A1:A6 单元格区域,按 <Ctrl+C> 组合 ...

  • Python 69个内置函数分8类总结,这样记更方便!

    0 内置函数 Python3解释器中内置了69个常用函数,属于底层的函数,它们到处可用.有些对大家来说比较熟悉,比如abs(), max(), sum()... 也有一些比较陌生,比如locals() ...

  • Excel常用函数之VLOOKUP函数动态返回不同的列

    从近期与大家的交流看,还有很多朋友对VLOOKUP函数不是很熟悉.因此,准备详细的介绍一下这个函数的使用.VLOOKUP函数功能非常强大,使用场景也变化很大,因此准备分为几篇来介绍: VLOOKUP函 ...