在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 的
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
但这就是我的方式,也许还有更好的。