本文主要介绍
namedtuple
类型对象的创建以及对应属性的访问。
namedtuple位于Python内置模块collections,属于tuple子类,类似于C/C++中的struct结构体,namedtuple中每个元素具有一个名称。
namedtuple类型声明
collections.namedtuple(typename, field_names, verbose=False, rename=False)
参数意义:
typename: 字符串,元组名称
field_names:由元组中元素的名称,可选类型为:字符串列表或空格分隔开字符串或逗号分隔开字符串
verbose: 默认就好
rename: 如果元素名称中含有python的关键字,则必须设置为rename=True
后两个参数采取默认值就好。
1. 调用流程
【1】声明一个namedtuple,此时只是相当于声明出了一种类型,并未具体创建实例
from collections import namedtuple
Student_Class = namedtuple("Student", ["name", "sex", "age"])
【2】实例化,此时真正创建出实例化对象
student = Student_Class("alpha", "male", 15)
print(student)
输出结果:Student(name='alpha', sex='male', age=15)
# 访问元素
student.name ==> "alpha"
student.sex ==> "male"
student.age ==> 15
【
注
】
在创建实例化对象时使用变量名,即Student_Class,而类型名称为Student,因此可以将变量名和类型名统一,后续使用无需区分。
type(student) ==> __main__.Student
Student_Class.__mro__ ==> (__main__.Student, tuple, object)
2. 参数field_names不同类型时具名元组的声明
# 第一种:field_names为空格分隔开字符串
Student_Class = namedtuple("Student", "name sex age")
# 第二种:field_names为逗号分隔开字符串
Student_Class = namedtuple("Student", "name, sex, age")
# 第三章:field_names为字符串列表
Student_Class = namedtuple("Student", ["name", "sex", "age"])
3. 具名元组常用属性
主要包括:
_fields: 返回一个元组,包含所有字段的名称
_make(iterable): 传入可迭代对象创建具名元组实例化对象
_replace(**kwds):修改具名元组中某一个元素值
_asdict(): 将具名元组对象转换成OrderedDict
【
以具体实例说明
】
(1)创建具名元组对象
In [1]: from collections import namedtuple
In [2]: Student_Class = namedtuple("Student", ["name", "sex", "age"])
In [3]: student = Student_Class(name="alpha", sex="male", age=20)
(2)_fields属性: 返回一个元组,包含所有的字段名称
In [4]: type(student._fields)
Out[4]: tuple
In [5]: student._fields
Out[5]: ('name', 'sex', 'age')
(3)_make(iterable): 传入可迭代对象创建具名元组实例化对象
In [6]: student = Student_Class._make(["beta", "female", 21])
In [7]: student
Out[7]: Student(name='beta', sex='female', age=21)
(4)_replace(**kwds):修改具名元组中某一个元素值
In [8]: student = student._replace(age=50)
In [9]: student
Out[9]: Student(name='beta', sex='female', age=50)
(5)_asdict():将具名元组对象转换成OrderedDict
In [10]: student.as_dict()
Out[10]: OrderedDict([('name', 'beta'), ('sex', 'female'), ('age', 50)])