if else in Python 数据类
if else in Python dataclasses
我正在尝试将 if else 与数据类放在一起。下面是代码片段。
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
我在这里错过了什么。在此先感谢您的帮助。
您不能在对象的 class 定义中执行条件初始值设定项,但您可以使用 __post_init__
和数据 class 来修改或更改 属性 值对象初始化后:
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 else 与数据类放在一起。下面是代码片段。
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
我在这里错过了什么。在此先感谢您的帮助。
您不能在对象的 class 定义中执行条件初始值设定项,但您可以使用 __post_init__
和数据 class 来修改或更改 属性 值对象初始化后:
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()
这应该符合您描述的行为。