python 으로 단일 모드 를 실현 하 는 몇 가지 방법
1741 단어 python
# __new__ ,python
class Singleton(object):
def __new__(cls, *args, **kwargs):
# _instance __new__ ,python
if not hasattr(cls, "_instance"):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kwargs)
return cls._instance
hasattr 반사 기술 을 이용 하여 있 는 지 여 부 를 판단 합 니 다instance 속성,없 으 면 object 의 호출new__방법 은 개인 변수 에 대상 할당 값 을 만 듭 니 다.
사용 방법
단일 모드 가 필요 한 클래스 를 이 클래스 를 계승 하면 됩 니 다.
#
class MyClass(Singleton):
pass
2、장식 기 사용
패 킷 을 이용 하여 장식 기 를 정의 합 니 다.
#
def singletonDecor(cls):
#
instance = {}
def getInstance(*args, **kwargs):
if cls not in instance.keys():
instance[cls] = cls(*args, **kwargs)
return getInstance
정 의 된 클래스 가 존재 하 는 대상 인 스 턴 스 사전 인지,존재 하지 않 으 면 대상 을 만 듭 니 다.
사용 방법
@singletonDecor
class MyTest3():
pass
하나의 예 가 필요 한 클래스 에 장식 기 를 추가 하면 됩 니 다.
3.장식 기 를 사용 하여 라인 이 안전 합 니 다.
#
from functools import wraps
from threading import RLock
def singleton(cls):
""" """
instances = {}
locker = RLock()
@wraps(cls)
def wrapper(*args, **kwargs):
if cls not in instances:
with locker:
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
RLock 을 도입 하여 대상 을 만 들 때 자 물 쇠 를 추가 합 니 다.@wraps(cls)의 역할 은 장식 기 에 수 식 된 함수 의 구조 가 변 하지 않도록 하 는 것 입 니 다.예 를 들 어 장식 기 에 수 식 된 함수
__name__
의 값 이 변 하지 않도록 하 는 등 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.