Maison  >  Article  >  développement back-end  >  Comment implémenter singleton en python

Comment implémenter singleton en python

(*-*)浩
(*-*)浩original
2019-06-27 09:28:513399parcourir

Singleton Pattern est un modèle de conception logicielle couramment utilisé. L'objectif principal de ce modèle est de garantir qu'une seule instance d'une certaine classe existe. Les objets Singleton sont utiles lorsque vous souhaitez qu'une seule instance d'une certaine classe apparaisse dans l'ensemble du système.

Comment implémenter singleton en python

En Python, nous pouvons utiliser diverses méthodes pour implémenter le modèle singleton (apprentissage recommandé : Tutoriel vidéo Python)

En fait, le module Python est un mode singleton naturel, car lorsque le module est importé pour la première fois, un fichier .pyc sera généré. Lors de sa deuxième importation, le fichier .pyc sera généré. être chargé directement au lieu de Le code du module sera à nouveau exécuté. Par conséquent, il suffit de définir les fonctions et les données pertinentes dans un module pour obtenir un objet singleton.

Utiliser des décorateurs

def Singleton(cls):
    _instance = {}
    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
        return _instance[cls]

    return _singleton
@Singleton
class A(object):
    a = 1

    def __init__(self, x=0):
        self.x = x
a1 = A(2)
a2 = A(3)

Utiliser des classes, Lorsque nous implémentons un singleton, afin de garantir la sécurité des threads, nous avons besoin à Ajout de verrou interne

On sait que lorsqu'on instancie un objet, on exécute d'abord la méthode __new__ de la classe (quand on ne l'écrit pas, object.__new__ est appelé par défaut) pour instancier l'objet ; Exécutez ensuite la méthode __init__ de la classe pour initialiser l'objet. Sur cette base, nous pouvons implémenter le mode singleton

en utilisant __metaclass__ (métaclasse)

Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Que signifie sep en python ?Article suivant:Que signifie sep en python ?