Python 단일 모드 의 몇 가지 흔 한 실현 방법 에 대한 상세 한 설명
여기 python 에서 실 현 된 단일 모드 를 참고 하 였 습 니 다:https://stackoverflow.com/questions/1363839/python-singleton-object-instantiation/1363852#1363852
1.부류 의 수정
__dict__
class Borg:
_shared_state = {}
def __init__(self):
self.__dict__ = self._shared_state
class Singleton(Borg):
def __init__(self, name):
super().__init__()
self.name = name
def __str__(self):
return self.name
x = Singleton('sausage')
print(x)
y = Singleton('eggs')
print(y)
z = Singleton('spam')
print(z)
print(x)
print(y)
이런 방법 이 실현 되 는 것 은 진정한 단일 모델 이 아 닙 니 다!!다음 몇 가지 방법 으로 실현 되 는 것 이 야 말로 진정한 단일 모델 이다.
2.원류 사용
먼저 여기에 있 는 원류 에 대한 설명 을 살 펴 보 자.
원 류 는 일반적으로 클래스 를 만 드 는 데 사 용 됩 니 다.
클래스 정 의 를 실행 할 때 해석 기 는 이러한 정확 한 원 류 를 알 아야 합 니 다.해석 기 는 클래스 속성
__metaclass__
을 먼저 찾 습 니 다.이 속성 이 존재 하면 이 속성 을 메타 클래스 로 할당 합 니 다.이 속성 이 정의 되 지 않 으 면 부모 클래스__metaclass__
를 위로 찾 습 니 다.__metaclass__
속성 이 발견 되 지 않 으 면 해석 기 는 이름__metaclass__
의 전역 변 수 를 검사 하고 존재 하면 원류 로 사용 합 니 다.그렇지 않 으 면 내 장 된 type 을 이러한 메타 클래스 로 사용 합 니 다.1.상속 type,사용
__call__
주의__call__
인자
class Singleton(type):
_instance = None
def __call__(self, *args, **kw):
if self._instance is None:
self._instance = super().__call__(*args, **kw)
return self._instance
class MyClass(object):
__metaclass__ = Singleton
print(MyClass())
print(MyClass())
2.상속 type,사용__new__
주의__new__
인자
class Singleton(type):
_instance = None
def __new__(cls, name, bases, dct):
if cls._instance is None:
cls._instance = super().__new__(cls, name, bases, dct)
return cls._instance
class MyClass(object):
__metaclass__ = Singleton
print(MyClass())
print(MyClass())
3.계승object
,사용__new__
주의__new__
인자
class Singleton(object):
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
class MyClass(object):
__metaclass__ = Singleton
print(MyClass())
print(MyClass())
다음은 또 하나의 교묘 한 방법 으로 단일 모델 을 실현 하 는 것 이다.클래스 사용 방법
classmethod
class Singleton:
_instance = None
@classmethod
def create(cls):
if cls._instance is None:
cls._instance = cls()
return cls._instance
def __init__(self):
self.x = 5 # or whatever you want to do
sing = Singleton.create()
print(sing.x) # 5
sec = Singleton.create()
print(sec.x) # 5
더 많은 파 이 썬 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.Python 데이터 구조 및 알고리즘 튜 토리 얼,Python Socket 프로 그래 밍 기술 총화,Python 함수 사용 기법 총화,Python 문자열 조작 기법 집합과Python 입문 및 진급 고전 튜 토리 얼본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.