如何在Python中定义单例方法

问题描述 投票:0回答:1

在Ruby中我们有多种方式可以让我们访问和修改实例的单例类,例如 https://ruby-doc.org/core-2.4.1/Object.html#method-i-singleton_class 或者 https://ruby-doc.org/core-2.4.1/Object.html#method-i-define_singleton_method

Python中有类似的东西吗? 或者在这里达到相同结果的最便捷方法是什么?

我发现了几种在 Python 中实现单例模式的方法。但我很好奇是否有更简洁的方式

python ruby singleton
1个回答
0
投票

在 Python 中,没有与 Ruby 的

define_singleton_method
singleton_class methods
直接等效的东西。

如果您希望实现单例模式(其中仅存在一个类的一个实例),则可以使用元类。元类允许您自定义类创建。

class SingletonMeta(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)
        return cls._instances[cls]

class SingletonClass(metaclass=SingletonMeta):
    def some_method(self):
        print("Method of a singleton class")

instance1 = SingletonClass()
instance2 = SingletonClass()
print(instance1 is instance2)  # True - both are the same instance

但这就是我的方式,也许还有更好的。

© www.soinside.com 2019 - 2024. All rights reserved.