初次看到namedtuple,就发现此类和普通的非内置类有点不同,正常的类使用时即是实例化了,但namedtuple并不是,而是先内部先创建了一个自定义的特殊类:

 1  1 from collections import defaultdict, namedtuple
 2  2
 3  3
 4  4 A = namedtuple('B', ['name1', 'name2'])
 5  5 d_dict = defaultdict(list)
 6  6 C = A('4', 'diamonds')
 7  7
 8  8 print(type(A))
 9  9 print(A.__mro__)
10 10 print(isinstance(A, type))
11 11 print("-" * 10)
12 12
13 13
14 14 print(type(d_dict))
15 15 print(isinstance(d_dict, defaultdict))
16 16 print("-" * 10)
17 17
18 18
19 19 print(type(C))
20 20 print(isinstance(C, A))
21
22
23 Out :
24   <class 'type'>
25   (<class '__main__.B'>, <class 'tuple'>, <class 'object'>)
26   True
27   ----------
28   <class 'collections.defaultdict'>
29   True
30   ----------
31   <class '__main__.B'>
32   True

像一般的类型比如说上面的defaultdict,或者自己定义一个类:

class myClass:passcls_1 = myClass()
print(type(myClass))
print(myClass.__mro__)Out:<class 'type'>(<class '__main__.myClass'>, <class 'object'>)

一般定义过后,直接使用 object_name = class_name()调用构造方法就实例化了,但namedtuple第一步即:

A = namedtuple('B', ['name1', 'name2'])

其实并没有完整的实例化(创建一个真正的namedtuple对象), 而是创建了一个带属性的tuple的自定义子类, 访问名称为A,内部名称为__main__.B(也就是type的实例,直接继承自tuple),然后经过

C = A('4', 'diamonds')

才真正的实例化了(创建了__main__.B(访问名称为A)的实例化对象)。

这里还同时引起了另一个问题那就是type和object的关系,之后找到一个帖子总结的不错:

  https://blog.csdn.net/andybegin/article/details/80775773

转载于:https://www.cnblogs.com/flincasnote/p/9973703.html

关于Python3的namedtuple问题相关推荐

  1. python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)

    上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续. namedtuples和数据类(Data Class)之间有什么区别? 功能 在Pyt ...

  2. [转载] Python3接口自动化框架:第三方openpyxl库读取excel之命名元组namedtuple承载数据

    参考链接: Python中的命名元组Namedtuple 背景:python自动化测试框架中,不管是UI还是api,都逃脱不掉数据驱动,除去一些框架的数据驱动方式,最直接的就是我们的excel测试用例 ...

  3. Python3中collections.OrderedDict介绍

    Python3中的collections模块实现了特定目标的容器,以提供Python标准内建容器dict.list.set和tuple的替代选择,包括namedtuple.deque.ChainMap ...

  4. python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/python.html typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints ...

  5. python3 collections模块_Python3之内建模块collections

    collections是python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不可变集合,例如,一个点的二维坐标可以表示成 >>> ...

  6. python3和Python2的区别

    print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...

  7. python3.x与python2.x的区别汇总

    python3.x与python2.7.x都是比较流行的版本,虽然建议现在的初学者开始学习python3.x的版本,但是还有很多的工程使用的是python2.7.x版本.观看代码的时候难免会出现一些问 ...

  8. python3.8 新特性

    Python 3.8是Python语言的最新版本,它适合用于编写脚本.自动化以及机器学习和Web开发等各种任务.现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变.内存共享 ...

  9. python3 限定方法参数 返回值 变量 类型

    typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...

  10. python3 x和python2 x区别_Python3.x和Python2.x的区别

    这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和 ...

最新文章

  1. 基于OpenCV实战:3步实现图像降噪
  2. python定义全局变量
  3. 《职场》笔记20061119
  4. python函数def_python def 函数
  5. zanePerfor 一款完整,高性能,高可用的前端性能监控系统,不要错过
  6. rds本地库到rds恢复_华为云RDS备份导入到本地
  7. .NET I/O 学习笔记:文件的读和写
  8. java io流printstream_java IO流:打印流 PrintStream
  9. 第六章 PX4-Sensors解析
  10. java excel row遍历空_Java poi读取,写入Excel,处理row和cell可能为空的情况
  11. JS 逆向 --- 过无限debugge、hook、js混淆还原、控制流混淆
  12. 在java中使用ffmpeg将amr格式的语音转为mp3格式
  13. 中国水雾化铁粉行业市场供需与战略研究报告
  14. 编程语言也有中年危机,Java 为何一直被唱衰?
  15. Oracle Study之案例--安装Oracle内核参数配置
  16. 中班音乐会跳舞的机器人_中班音乐律动机器人
  17. 微信公众号的html5界面用什么软件,微信公众号编辑排版用什么软件(推荐这4款编辑器)...
  18. 将分类图像转换为ERDAS可识别的专题图像(Continuous to Thematic)
  19. 大数据就业方向_如今大数据行业就业前景如何?
  20. 【Elasticsearch】利用kibana调整索引mapping结构

热门文章

  1. 内存分配失败错误处理
  2. MySQL主从同步的概述_MySQL主从同步原理介绍
  3. C语言——变量篇(一)变量关键字static、auto、extern、register
  4. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积
  5. 为什么很多公司不允许使用C++ STL?
  6. profile和bashrc
  7. JVM飙高排查脚本-结构分析
  8. Visual studio 2013 连接MySQL数据库的设置。
  9. QT开发pjsip的VOIP,A8平台运行
  10. Android反编译与防止反编译