РЕДАКТИРОВАТЬ: для ясности мне нужно 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')
Однако я чувствую, что это довольно некрасиво и что я, возможно, что-то здесь упускаю.В моем настоящем классе будет больше полей, поэтому он станет только хуже.
РЕДАКТИРОВАТЬ: я должен добавить, что параметры, передаваемые в класс, содержат None, и я не могу контролировать этот аспект.