如何将 class 实例添加到数据 class 表示法中的 class 变量?

How to add the class instance to a class variable in dataclass notation?

我想将所有 class 个实例添加到一个 class 变量

我想这样做:

class Circle:
    all_circles = []
    def __init__(self, rad):
        self.rad = rad
        self.__class__.all_circles.append(self)

所以每当我创建一个新的圆实例时,它都会被添加到 all_circle class 变量中。

如何用 dataclass 表示法做到这一点?

我想复制 @dataclass 中顶部的代码,但我无法在任何地方找到如何执行此操作,因为我无法访问 self。

类似于:

from dataclasses import dataclass
from typing import ClassVar


@dataclass
class Circle:
    rad: int = 1
    all_circles = ClassVar[list] = [] # after this I don't know how to get the self because it is not available
    

但是我找不到怎么做。

找到答案

我在查看 dataclass 的其他示例后找到了解决方案! 您可以使用 __post_init__ 函数来获得相同的结果!

from dataclasses import dataclass
from typing import ClassVar

@dataclass
class Circle:
    rad: int = 1
    all_circles = ClassVar[list["Circle"]] = []

    def __post_init__(self: "Circle") -> None:
        Circle.all_circles.append(self)

如果有更好的方法请告诉我。