gpt4 book ai didi

python - frozen=True 时如何设置__post_init__ 中dataclass 字段的值?

转载 作者:太空狗 更新时间:2023-10-29 17:47:31 25 4
gpt4 key购买 nike

我正在尝试创建一个卡住的数据类,但我在设置 __post_init__ 的值时遇到了问题。使用 frozen=True 设置时,是否可以根据 dataclass 中的 init param 的值设置字段值?

RANKS = '2,3,4,5,6,7,8,9,10,J,Q,K,A'.split(',')
SUITS = 'H,D,C,S'.split(',')


@dataclass(order=True, frozen=True)
class Card:
rank: str = field(compare=False)
suit: str = field(compare=False)
value: int = field(init=False)
def __post_init__(self):
self.value = RANKS.index(self.rank) + 1
def __add__(self, other):
if isinstance(other, Card):
return self.value + other.value
return self.value + other
def __str__(self):
return f'{self.rank} of {self.suit}'

这是痕迹

 File "C:/Users/user/.PyCharm2018.3/config/scratches/scratch_5.py", line 17, in __post_init__
self.value = RANKS.index(self.rank) + 1
File "<string>", line 3, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field 'value'

最佳答案

使用the same thing the generated __init__ method does : object.__setattr__.

def __post_init__(self):
object.__setattr__(self, 'value', RANKS.index(self.rank) + 1)

关于python - frozen=True 时如何设置__post_init__ 中dataclass 字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53756788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com