Home Backend Development Python Tutorial Python singleton pattern example

Python singleton pattern example

Mar 03, 2017 am 11:57 AM

The examples in this article describe the Python singleton mode. Share it with everyone for your reference, the details are as follows:

Single case mode: Ensures that a class has only one instance and provides a global access to it access point.

Ways to achieve only one instance of a class:

1. Let a global variable enable an object to be accessed, but it cannot prevent multiple objects from being instantiated externally. .

2, let the class itself save its only instance, this class can guarantee that no other instances can be created.

Singleton mode in multi-threading: Lock-double lock

Hungry-style singleton class: When the class is loaded Instantiate yourself (static initialization). The advantage is that it avoids the security issues of multi-threaded access, but the disadvantage is that it occupies system resources in advance.

Lazy singleton class: It will only instantiate itself when it is referenced for the first time. Avoid occupying system resources at the beginning, but there are security issues with multi-threaded access.

Example:

#encoding=utf-8
#单例模式
def PrintInfo(info):
#  print unicode(info,'utf-8').decode('gbk')
  print info.decode('utf-8').encode('utf-8')
import threading
#单例类
class Singleton():
  instance=None
  mutex=threading.Lock()
  def _init__(self):
    pass
  @staticmethod
  def GetInstance():
    if(Singleton.instance==None):
      Singleton.mutex.acquire()
      if(Singleton.instance==None):
        PrintInfo('初始化实例')
        Singleton.instance=Singleton()
      else:
        PrintInfo('单例已经实例化')
      Singleton.mutex.release()
    else:
      PrintInfo('单例已经实例化')
    return Singleton.instance
def clientUI():
  Singleton.GetInstance()
  Singleton.GetInstance()
  Singleton.GetInstance()
  return
if __name__=='__main__':
  clientUI();
Copy after login

Result:

初始化实例 单例已经实例化 单例已经实例化
Copy after login

Additional explanation @staticmethod When mentioning classmethod in Python, staticmethod must be mentioned, not because there is any relationship between the two, but to allow users to distinguish so that they can write code more clearly. In C++, we understand that functions accessed directly through the class name are called static functions of the class, that is, static-modified functions. It can be seen that classmethod and staticmethod in C++ are the same concept. So what is the difference between the two in python? Let’s first look at how the two are declared in python code

class MyClass:
 ...
 @classmethod # classmethod的修饰符
 def class_method(cls, arg1, arg2, ...):
  ...
 @staticmethod # staticmethod的修饰符
 def static_method(arg1, arg2, ...):
  ...
Copy after login

For the parameters of classmethod, the class name needs to be passed implicitly, but the staticmethod parameter does not. The class name needs to be passed. In fact, this is the biggest difference between the two.

Both can be called through class names or class instance objects. Because the emphasis is on classmethod and staticmethod, it is best to use class names when writing code. It is a good programming habit.

The static method is set up to be defined in the class. Generally speaking, it is rarely used in this way. You can use module-level functions to replace it. Since it is to be defined in a class, the author must have considered it.

For classmethod, it can be redefined through subclasses.

Mention class-level functions, and also mention class-level variables

class MyClass:
 i = 123 # class-level variable
 def __init__(self):
 self.i = 456 # object-level variable
 ...
Copy after login

In order to clearly distinguish the above two i, the last A good way is to consider that everything in python is object, so i=123 belongs to class object, and i=456 belongs to class instance object

For more articles related to Python singleton mode examples, please pay attention to PHP Chinese website !

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to solve the permissions problem encountered when viewing Python version in Linux terminal? How to solve the permissions problem encountered when viewing Python version in Linux terminal? Apr 01, 2025 pm 05:09 PM

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

How to avoid being detected by the browser when using Fiddler Everywhere for man-in-the-middle reading? How to avoid being detected by the browser when using Fiddler Everywhere for man-in-the-middle reading? Apr 02, 2025 am 07:15 AM

How to avoid being detected when using FiddlerEverywhere for man-in-the-middle readings When you use FiddlerEverywhere...

How to efficiently copy the entire column of one DataFrame into another DataFrame with different structures in Python? How to efficiently copy the entire column of one DataFrame into another DataFrame with different structures in Python? Apr 01, 2025 pm 11:15 PM

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

How to teach computer novice programming basics in project and problem-driven methods within 10 hours? How to teach computer novice programming basics in project and problem-driven methods within 10 hours? Apr 02, 2025 am 07:18 AM

How to teach computer novice programming basics within 10 hours? If you only have 10 hours to teach computer novice some programming knowledge, what would you choose to teach...

How does Uvicorn continuously listen for HTTP requests without serving_forever()? How does Uvicorn continuously listen for HTTP requests without serving_forever()? Apr 01, 2025 pm 10:51 PM

How does Uvicorn continuously listen for HTTP requests? Uvicorn is a lightweight web server based on ASGI. One of its core functions is to listen for HTTP requests and proceed...

How to solve permission issues when using python --version command in Linux terminal? How to solve permission issues when using python --version command in Linux terminal? Apr 02, 2025 am 06:36 AM

Using python in Linux terminal...

How to get news data bypassing Investing.com's anti-crawler mechanism? How to get news data bypassing Investing.com's anti-crawler mechanism? Apr 02, 2025 am 07:03 AM

Understanding the anti-crawling strategy of Investing.com Many people often try to crawl news data from Investing.com (https://cn.investing.com/news/latest-news)...

See all articles