Python数据类中的if-else
我想把if-else和dataclass放在一起。下面是代码片段Python数据类中的if-else,python,python-dataclasses,Python,Python Dataclasses,我想把if-else和dataclass放在一起。下面是代码片段 from dataclasses import dataclass, field @dataclass class XYZ: test:bool = True if test: param:str = field(default='abcd', init=True) else: param:str = field(default='xyz', init=True)
from dataclasses import dataclass, field
@dataclass
class XYZ:
test:bool = True
if test:
param:str = field(default='abcd', init=True)
else:
param:str = field(default='xyz', init=True)
def f1(self):
print(self.test, self.param)
如果我以以下方式运行上述代码:
XYZ(test=False).f1()
输出为:
False abcd
我需要的是输出为False xyz
我错过了什么。提前感谢您的帮助。您不能在对象的类定义中进行条件初始化,但您可以在对象初始化后使用数据类修改或更改属性值:
from dataclasses import dataclass, field
@dataclass
class XYZ:
test: bool = True
param: str = None
def __post_init__(self):
if self.param is None:
self.param = 'abcd' if self.test else 'xyz'
def f1(self):
print(self.test, self.param)
# Prints False, xyz
XYZ(test=False).f1()
# Prints True, abcd
XYZ(test=True).f1()
# Prints True, foo
XYZ(test=True, param='foo').f1()
这应该与您描述的行为相匹配。if test块是类定义的一部分,因此它在定义类时运行,而不是在实例化类时运行。@khelwood如果将if条件放入函数中,那么最好的方法是什么?我将得到pylint error