Python数据类中的if-else

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)

我想把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)
    
    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