Python Dataclass设置str默认值为None报错,求可行设置方法
问题解决:Python Dataclass 默认参数顺序错误及兼容调用方案
你遇到的TypeError: non-default argument 'suit' follows default argument错误,本质是Python的参数规则限制:无默认值的参数不能放在有默认值的参数之后——dataclass自动生成的__init__方法也遵循这个规则,所以你把带默认值的rank放在必填的suit前面,就触发了报错。
以下两种方案可以满足你的需求:既给rank设置None默认值,又支持通过DataClassCard(suit='a')的方式创建实例。
方案一:调整字段顺序(兼容所有Python版本)
把必填的suit字段放到带默认值的rank前面,之后调用时用关键字参数指定suit即可:
from dataclasses import dataclass @dataclass class DataClassCard: suit: str rank: str = None # 符合需求的调用方式 queen_of_hearts = DataClassCard(suit='a') print(queen_of_hearts.rank) # 输出: None
方案二:使用kw_only=True(Python 3.10+ 支持)
给dataclass装饰器添加kw_only=True参数,强制所有字段必须通过关键字参数传入,这样就能保留你原本的字段顺序:
from dataclasses import dataclass @dataclass(kw_only=True) class DataClassCard: rank: str = None suit: str # 符合需求的调用方式 queen_of_hearts = DataClassCard(suit='a') print(queen_of_hearts.rank) # 输出: None
内容的提问来源于stack exchange,提问作者Victor Johnson
相关产品推荐
相关产品推荐

