如何在数据类上创建非字段实例级变量?
How to create a non-field instance-level variable on a dataclass?
如果我理解得很好,ClassVar
是一种在数据 class 上创建 class 变量的方法,该变量不会被视为字段。所以,例如:
@dataclass
class MyData:
name: str
age: int
parent: ClassVar[Optional["MyData"]] = None
jake_data = MyData(name="Jake", age=34)
dataclasses.fields(jake_data) # This will output only two fields, as status is a ClassVar
但是如果我想在实例初始化后在实例级别修改parent
,它不应该是ClassVar
,因为PEP 526清楚地表明ClassVar
注释只应用于未在实例级别替换的变量。而且我不想将 parent
声明为具有默认值的字段,因为那样它将是... dataclass 字段!
对于上下文:我使用依赖于 dataclasses.fields
输出的库,这就是我希望它成为非字段变量的原因。
是否有一种 pythonic 和可读的方式来做到这一点?
只是不要注释它,并在 __post_init__
中定义它,所以类似于:
@dataclass
class MyData:
name: str
age: int
def __post_init__(self):
self.parent = None
# whatever else
如果我理解得很好,ClassVar
是一种在数据 class 上创建 class 变量的方法,该变量不会被视为字段。所以,例如:
@dataclass
class MyData:
name: str
age: int
parent: ClassVar[Optional["MyData"]] = None
jake_data = MyData(name="Jake", age=34)
dataclasses.fields(jake_data) # This will output only two fields, as status is a ClassVar
但是如果我想在实例初始化后在实例级别修改parent
,它不应该是ClassVar
,因为PEP 526清楚地表明ClassVar
注释只应用于未在实例级别替换的变量。而且我不想将 parent
声明为具有默认值的字段,因为那样它将是... dataclass 字段!
对于上下文:我使用依赖于 dataclasses.fields
输出的库,这就是我希望它成为非字段变量的原因。
是否有一种 pythonic 和可读的方式来做到这一点?
只是不要注释它,并在 __post_init__
中定义它,所以类似于:
@dataclass
class MyData:
name: str
age: int
def __post_init__(self):
self.parent = None
# whatever else