我试图创建一个类,它保存一些数据,并在所有代码中“共享”。就像Python中的字符串一样:它们在任何地方都是共享的,因为它们是不可变的,并且只有一个具有特定值的实例存在。
我想按需创建这个类,但每次我用相同的参数创建这个类时,我都想得到相同的对象。
我编写了以下代码:
class Data:
_instances: dict[str, "Data"] = {}
def __new__(cls, data: str) -> "Data":
if data not in cls._instances:
cls._instances[data] = super().__new__(cls)
return cls._instances[data]
def __init__(self, data: str) -> None:
self._data = data
@property
def data(self) -> str:
return self._data
@data.setter
def data(self, data: str) -> None:
raise KeyError("Cannot change an immutable object")
这似乎是可行的,但我有一种感觉,就是没有使用Python提供的所有工具来处理这种情况。
有什么方法可以实现这一点吗
dataclass
锿?还是一个更具Python风格的代码来实现同样的效果?