编辑:为了清楚起见,我需要一个class
,它将接受许多参数,我知道所有参数都将提供,但有些可能会被传递为None
,在这种情况下,我的class
将必须提供默认值.
我想用一些默认值设置一个简单的dataclass
,如下所示:
@dataclass
class Specs1:
a: str
b: str = 'Bravo'
c: str = 'Charlie'
我希望能够获得第二个字段的默认值,但仍然为第三个字段设置一个值.我无法使用None来执行此操作,因为它被愉快地接受为字符串的值:
r1 = Specs1('Apple', None, 'Cherry') # Specs1(a='Apple', b=None, c='Cherry')
我提出了以下解决方案:
@dataclass
class Specs2:
def_b: ClassVar = 'Bravo'
def_c: ClassVar = 'Charlie'
a: str
b: str = def_b
c: str = def_c
def __post_init__(self):
self.b = self.def_b if self.b is None else self.b
self.c = self.def_c if self.c is None else self.c
这似乎是故意的:
r2 = Specs2('Apple', None, 'Cherry') # Specs2(a='Apple', b='Bravo', c='Cherry')
然而,我觉得这很难看,我可能错过了一些东西.我的实际班级将有更多的领域,所以只会变得更丑陋.
编辑:我应该补充一点,传递给类的参数不包含任何参数,我对这方面没有控制权.