相关疑难解决方法(0)

以编程方式扩展数据类' __repr__

假设我有一个带有 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)

python python-dataclasses

7
推荐指数
1
解决办法
8573
查看次数

Python数据类生成哈希并排除不安全字段

我有这个数据类:

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__ 方法吗?在这种情况下,namedob应该包含在生成哈希中,但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)

我也找不到设置namedob冻结的方法。仅仅从声音来看,我不会将其设置unsafe_hash为。 …

python python-dataclasses

6
推荐指数
1
解决办法
8032
查看次数

标签 统计

python ×2

python-dataclasses ×2