Singletons are a design pattern that ensures only a single instance of a class is ever created. Here are recommendations for implementing singletons in Python:
Use a Metaclass
This method offers several advantages:
class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class Logger(object): __metaclass__ = Singleton
Corrections to Other Methods
In the original post, the base class implementation is incorrect. It requires referencing _instances on the class, using super(), and correcting new to be a static method that takes the class as an argument.
When to Use Singletons
While there are debates about their desirability, singletons are suitable for certain situations:
In the scenario presented, where logging is the use case, the singleton pattern is an appropriate choice.
The above is the detailed content of How to Implement a Singleton Pattern in Python for Logging?. For more information, please follow other related articles on the PHP Chinese website!