python namedtuple和dataclass python中的结构体
python namedtuple和dataclass python中的结构体
go里面有结构体,比较方便,python中有什么类似的吗?有namedtuple或dataclass !
在使用namedtuple或dataclass定义类时,您可以为每个字段指定一个默认值。在创建对象时如果没有为该字段提供值,则会使用默认值。
namedtuple
namedtuple是Python标准库中的一种数据类型,它允许您定义一个具有命名字段的元组。这使得您可以像使用对象属性一样访问元组的字段,而不是使用索引。namedtuple是不可变的,也就是说,一旦创建,您就不能修改它的字段的值
对于namedtuple,可以在定义时为每个字段指定默认值,例如:
from collections import namedtuple
# 定义一个namedtuple类型,其中age字段的默认值为0
Person = namedtuple('Person', ['name', 'age', 'gender'], defaults=[None, 0, None])
# 创建一个Person对象,不为age字段指定值
person = Person(name='Alice', gender='female')
# 访问字段
print(person.name)
print(person.age)
print(person.gender)
对于dataclass,可以在字段定义时使用default参数指定默认值,例如:
dataclass
dataclass是Python 3.7版本引入的一种新特性,它允许您使用类似于结构体的语法定义简单的数据类。与namedtuple不同,dataclass是可变的,也就是说,您可以修改它的字段的值
from dataclasses import dataclass
# 定义一个dataclass类型,其中age字段的默认值为0
@dataclass
class Person:
name: str
age: int = 0
gender: str = None
# 创建一个Person对象,不为age字段指定值
person = Person(name='Alice', gender='female')
# 访问字段
print(person.name)
print(person.age)
print(person.gender)
请注意,如果为字段指定了默认值,则在创建对象时可以不为该字段提供值。如果为该字段提供了值,则使用提供的值,否则使用默认值。同时也可以在创建对象时为该字段提供一个None值来覆盖默认值。