Py学习  »  Python

如何在python中创建inmutable和singleton对象?

Poshi • 3 年前 • 1421 次点击  

我试图创建一个类,它保存一些数据,并在所有代码中“共享”。就像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风格的代码来实现同样的效果?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133843
 
1421 次点击  
文章 [ 1 ]  |  最新文章 3 年前