Python 단일 모드 의 몇 가지 흔 한 실현 방법 에 대한 상세 한 설명

3862 단어 Python패턴
본 논문 의 사례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기