如何将 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)
如果有更好的方法请告诉我。
我想将所有 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)
如果有更好的方法请告诉我。