python dataclass 与 namedtuple

  1. 为什么要用到这两个数据结构
  2. dataclass 和 namedtuple 的差别

dataclassnamedtuple都是python重要的数据结构

为什么要用到这两个数据结构

  1. 如果只是简单的返回return ('name', 30) 这样的话,就无法确保返回值被准确的调用
  2. 如果使用return {'name': 'Elin', 'age': 30} 这样的话无法使用散列,并且需要跟踪key名称。另外dict是可变的。

dataclassnamedtuple 的差别

同样使数据结构,但是两个有一些差别。

dataclass:

  • 可以设置默认值
  • 定义__post_init__方法来延迟初始化一些默认值
  • 默认不支持hash,需要关闭unsafe_hash参数
  • 生成后可以修改值
from dataclasses import dataclass


@dataclass class Person: name: str age: int title: str = None
def __post_init__(self): self.title = f"Hello {self.name}"
def welcome(self): return f"Welcome {self.name}"

p1 = Person("John", 30) print(p1.title) # Hello John print(p1.welcome()) # Welcome John

namedtuple:

  • 不能设置默认值
  • 生成后不能修改值
  • 使用typing.NamedTuple自定义类
from collections import namedtuple

Person = namedtuple('PersonA', 'name age')
p1 = Person(name='John', age=30) print(p1.name)
from typing import NamedTuple


class Person(NamedTuple): name: str age: int
def welcome(self): return f"welcome {self.name}"

p1 = Person(name='John', age=30) print(p1.welcome())

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com