假设我有一个带有 set 方法的数据类。如何扩展 repr 方法,以便在调用 set 方法时它也会更新:
from dataclasses import dataclass
@dataclass
class State:
A: int = 1
B: int = 2
def set(self, var, val):
setattr(self, var, val)
Run Code Online (Sandbox Code Playgroud)
前任:
In [2]: x = State()
In [3]: x
Out[3]: State(A=1, B=2)
In [4]: x.set("C", 3)
In [5]: x
Out[5]: State(A=1, B=2)
In [6]: x.C
Out[6]: 3
Run Code Online (Sandbox Code Playgroud)
我想要的结果
In [7]: x
Out[7]: State(A=1, B=2, C=3)
Run Code Online (Sandbox Code Playgroud) 我有这个数据类:
from dataclasses import dataclass, field
from typing import List
@dataclass
class Person:
name: str
dob: str
friends: List['Person'] = field(default_factory=list, init=False)
Run Code Online (Sandbox Code Playgroud)
name并且dob是不可变的并且friends是可变的。我想生成每个人对象的哈希值。我可以以某种方式指定要包含和排除哪个字段来生成__hash__ 方法吗?在这种情况下,name和dob应该包含在生成哈希中,但friends不应该包含。这是我的尝试,但没有成功
@dataclass
class Person:
name: str = field(hash=True)
dob: str = field(hash=True)
friends: List['Person'] = field(default_factory=list, init=False, hash=False)
Run Code Online (Sandbox Code Playgroud)
>>> hash(Person("Mike", "01/01/1900"))
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
hash(Person("Mike", "01/01/1900"))
TypeError: unhashable type: 'Person'
Run Code Online (Sandbox Code Playgroud)
我也找不到设置name和dob冻结的方法。仅仅从声音来看,我不会将其设置unsafe_hash为。 …