namedtuple()
是一个工厂函数, 用来创建一个tuple
的子类型namedtuple
.
我们以前的tuple
只能通过下标去访问, namedtuple
访问元素的时候可以使用类似属性的东西去访问.
基本使用
from collections import namedtuple
# 参数1: 要创建的 tuple 的类型的名字 参数2:新类型拥有的属性列表
# 返回的是个类, 这个类的类名就是 Point(参数1确定的) , 拥有两个属性 x, y
# 变量 Point 只是表示我们又重新定义了变量指向了返回的那个类而已
Point = namedtuple("Point", ["x", "y"])
print(Point)
print(issubclass(Point, tuple)) # 确实是 tuple 的子类
# 使用返回的类型创建一个对象, 这个对象就表示一个平面中的点
p1 = Point(x=10, y=20)
print(p1.x)
print(p1.y)
说明:
从上面可以很容易的看出来, 使用
namedtuple
可以很容易定义出一种数据类型他具备
tuple
的不可变性, 又能根据属性来引用, 一个字:用起来就是爽定义一个表示平面的圆:
Circle = namedtuple('Circle', ['x', 'y', 'r'])
继承自tuple
由于namedtuple
返回的类继承自tuple
, 所以tuple
的属性和方法在这里都可以使用.
比如用下标去访问, 用for
去迭代等等.
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p1 = Point(x=10, y=20)
print(p1[0])
print(p1[1])
for i in p1:
print(i)
3 个新增方法和 2 个新增属性
类方法:_make(序列或迭代器)
从已知的序列或迭代器中创建一个实例
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
nums = [20, 100]
p1 = Point._make(nums)
print(p1)
p2 = Point._make(range(10, 12))
print(p2)
实例方法:_asdict()
返回一个列表(从3.1f开始是一个OrderedDict
)
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
d = p1._asdict()
print(d)
实例方法:_replace(关键字参数)
更改某个属性的值, 由于namedtuple
是不可变的, 所以返回的是一个新的namedtuple
实例对象
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
p2 = p1._replace(y=100)
print(p2)
类属性:_source
返回创建的类的源码
类属性: _fields
返回创建类的所有属性
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
print(Point._fields)