namedtuple的简单使用

"""
    factory function for creating tuple subclasses with named fields
    namedtuple 是tuple的子类,
    在tuple的基础上增添了许多功能, 最主要是可以把它看成一个类来使用
"""
from  collections import namedtuple

# 使用namedtuple的第一种方式
User = namedtuple("User", ['name', 'age', 'height'])  # 这就相当于定义了一个User类,且它有三个属性name,age,height
user_tuple = ('张三', '12', '186')
user = User(*user_tuple)  # 使用元组,创建一个User对象 ,且将user_tuple中的元素依次赋值给user, 注意*号
print(user.name)  # 张三 直接使用.xx 取值, 很方便啦

# 使用namedtuple的第二种方式
User = namedtuple("User", ['name', 'age', 'height', 'edu'])
user_tuple = ('张三', 12, 186)
# user = User(*user_tuple,'doctor')   # 定义的User是四个属性,但是user_tuple中只有三个值, 但是可以在创建对象时添加其余属性
user = User(*user_tuple, edu='doctor')  # 定义的User是四个属性,但是user_tuple中只有三个值, 但是可以在创建对象时添加其余属性
print(user.edu)  # doctor  一样可以取到值
name, age, *other = user  # 支持拆包操作
print(name, age, other)  # 张三 12 [186, 'doctor']

# 使用namedtuple第三种方式
User = namedtuple("User", ['name', 'age', 'height', 'edu'])
user_tuple = ('张三', 12, 186, 'master')
user = User._make(user_tuple)  # 使用_make方法创建对象实例,不过需要注意的是user_tuple中数据个数一定要与User中声明的属性个数相等
print(user)  # User(name='张三', age=12, height=186, edu='master')


# 使用namedtuple的第四种方式
User = namedtuple("User", ['name', 'age', 'height', 'edu'])
user_tuple = ('张三', 12, 186, 'master')
user = User._make(user_tuple)
user_dict = user._asdict()  # 转换为一个排序的dict
print(user_dict)  # OrderedDict([('name', '张三'), ('age', 12), ('height', 186), ('edu', 'master')])

# 注意: 以上示例使用user_tuple的地方都可以换成一个iterable对象
原文地址:https://www.cnblogs.com/z-qinfeng/p/12038424.html