Python 数据 类。不能将参数用作列表中的元素

Python data classes. Can't use arguments as elements in list

所以我在寻找类似 C 系列结构的东西后偶然发现了 python 数据 类。只是我不明白为什么你不能做这样的事情:

@dataclass
class Player:
    gridx: float
    gridy: float
    rotation: float
    pos = [gridx, gridy]

player = Player(2.5, 5.5, PI)

它说 gridx 没有定义。也许我只是理解错误的结构,你甚至不能用像 C 这样的语言来做到这一点。我认为它只是类似于正常 python 类 中的 __init__ 方法,你在哪里几乎可以为所欲为。

from dataclasses import dataclass
from math import pi

@dataclass
class Player:
    gridx: float
    gridy: float
    rotation: float

    @property
    def pos(self):
        return [self.gridx, self.gridy]

player = Player(2.5, 5.5, pi)
print(player.pos)

输出

[2.5, 5.5]

是否允许设置 pos 以更改 gridxgridy(即 @pos.setter

,这取决于您

数据类 或多或少让写这个更容易:

class Player:
    def __init__(self, gridx, gridy, rotation):
        self.gridx = gridx
        self.gridy = gridy
        self.rotation = rotation

不要一直重复自己。我假设在您编写数据函数时 gridx 和 gridy 尚未定义。虽然你可以做的是使用 post_init 函数来处理:

@dataclass
class Player:
    gridx: float
    gridy: float
    rotation: float

    def __post_init__(self):
        self.pos = [self.gridx, self.gridy]

player = Player(2.5, 5.5, math.pi)
print(player.pos)

顾名思义,它是一个应用的函数post(之后)数据类已按上述方式重写。