第二章:数据结构-collections:容器数据类型-namedtuple:带命名字段的元组子类(3)

2.2.5.3 指定属性
namedtuple提供了很多有用的属性和方法来处理子类和实例。所有这些内置属性名都有一个下划线(_)前缀,按惯例在大多数python程序中,这都会指示一个私有属性。不过,对于namedtuple,这个前缀是为了防止这个名字与用户提供的属性名冲突。
传入namedtuple来定义新类的字段名会保存在_fields属性中。

import collections

Person = collections.namedtuple('Person','name age')

bob = Person(name='bob',age=30)
print('Representation:',bob)
print('Fields:',bob._fields)

尽管参数是一个用空格分隔的字符串,但存储的值却是由各个名字组成的一个序列。
运行结果:

Representation: Person(name=‘bob’, age=30)
Fields: (‘name’, ‘age’)

可以使用_asdict()将namedtuple实例转换为OrderedDict实例。

import collections

Person =collections.namedtuple('Person','name age')

bob = Person(name='bob',age=30)
print('Representation:',bob)
print('As Dictionary:',bob._asdict())

OrderedDict的键与相应namedtuple的字段顺序相同。
运行结果:

Representation: Person(name=‘bob’, age=30)
As Dictionary: OrderedDict([(‘name’, ‘bob’), (‘age’, 30)])

_replace()方法构建一个新实例,在这个过程中会替换一些字段的值。

import collections

Person = collections.namedtuple('Person','name age')

bob = Person(name='Bob',age=30)
print('\nBefore:',bob)

bob2 = bob._replace(name='Robert')
print('After:',bob2)
print('Same?:',bob is bob2)

尽管从名字上看似乎会修改现有的对象,但由于namedtuple实例是不可改变的,所以实际上这个方法会返回一个新对象。
运行结果:

Before: Person(name=‘Bob’, age=30)
After: Person(name=‘Robert’, age=30)
Same?: False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值