python如何實現單例模式?常用方法彙總!

老男孩IT教育機構發表於2021-06-04

  python如何實現單例模式?Python單例模式是大家最熟悉的一種設計模式,雖然簡單,但涉及的內容有很多,而且Python中實現單例模式的方法也有很多,接下來我們一起來看看吧。

  第一種方法:使用裝飾器

  def singleton(cls):

  instances = {}

  def wrapper(*args, **kwargs):

  if cls not in instances:

  instances[cls] = cls(*args, **kwargs)

  return instances[cls]

  return wrapper

  @singleton

  class Foo(object):

  pass

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2) # True

  第二種方法:使用基類

  New 是真正建立例項物件的方法,所以重寫基類的new 方法,以此保證建立物件的時候只生成一個例項

  class Singleton(object):

  def __new__(cls, *args, **kwargs):

  if not hasattr(cls, '_instance'):

  cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)

  return cls._instance

  class Foo(Singleton):

  pass

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2) # True

  第三種方法:元類

  元類是用於建立類物件的類,類物件建立例項物件時一定要呼叫call方法,因此在呼叫call時候保證始終只建立一個例項即可,type是python的元類

  class Singleton(type):

  def __call__(cls, *args, **kwargs):

  if not hasattr(cls, '_instance'):

  cls._instance = super(Singleton, cls).__call__(*args, **kwargs)

  return cls._instance

  # Python2

  class Foo(object):

  __metaclass__ = Singleton

  # Python3

  class Foo(metaclass=Singleton):

  pass

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2) # True


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2775494/,如需轉載,請註明出處,否則將追究法律責任。

相關文章