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()

这应该符合您描述的行为。