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值来覆盖默认值。

posted @ 2023-05-10 19:45  liwenchao1995  阅读(123)  评论(0)    收藏  举报