什麼是單例模式基於某種實現方式,例項化產生的多個物件是同乙個(指向同乙個記憶體位址)--->以節省記憶體
實現方式一:通過類繫結方法import setting
class mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
@classmethod
def get_conf(cls):
if not hasattr(cls, '_%s__instance' % cls.__name__):
cls.__instance = cls(setting.ip, setting.port)
return cls.__instance
obj1 = mysql.get_conf()
obj2 = mysql.get_conf()
obj3 = mysql('127.0.0.1', 8080)
print(obj1)
print(obj2)
print(obj3)
# 通過類繫結方法,如果從配置檔案載入ip與port,例項化產生的物件都是同乙個
實現方式二:通過裝飾器import setting
def singleton(cls):
_instance = cls(setting.ip, setting.port)
if args or kwargs:
obj = cls(*args, **kwargs)
return obj
return _instance
@singleton
class mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
obj1 = mysql()
obj2 = mysql()
obj3 = mysql('10.1.1.1', 8080)
print(obj1)
print(obj2)
print(obj3)
實現方式三:通過元類import setting
class mytype(type):
def __init__(cls, class_name, class_bases, class_dic):
super().__init__(class_name, class_bases, class_dic)
cls.__instance = cls(setting.ip, setting.port)
# cls.__instance = cls.__new__(cls)
# cls.__init__(cls.__instance,setting.ip,setting.port)
def __call__(cls, *args, **kwargs):
if args or kwargs:
obj = cls.__new__(cls)
cls.__init__(obj, *args, **kwargs)
return obj
return cls.__instance
class mysql(object, metaclass=mytype):
def __init__(self, ip, port):
self.ip = ip
self.port = port
obj1 = mysql()
obj2 = mysql()
obj3 = mysql('10.1.1.1', 8080)
print(obj1)
print(obj2)
print(obj3)
實現方式四:根據導模組的特性# 被匯入的模組
import setting
class mysql:
def __init__(self,ip,port):
self.ip = ip
self.port = port
instance_obj = mysql(setting.ip,setting.port)
#執行檔案
from singleton import mysql, instance_obj
def f1():
return mysql('10.1.1.1', 8080)
def f2():
return instance_obj
obj1 = f1()
obj2 = f2()
obj3 = f2()
print(obj1)
print(obj2)
print(obj3)
python之路 物件導向
不了解什麼是物件導向,就無法更好的掌握python python既支援面向過程的程式設計也支援物件導向的程式設計。面向過程 程式是由過程或僅僅是可重用 的函式構建起來的。物件導向 程式是由資料和功能組合而成的物件構建起來的。物件導向中兩個重要的概念是類和物件。類是對事物的抽象,比如說 人類 物件是具...
python之路 物件導向之反射
isinstance 與 issubclass isinstance 用於判斷乙個物件是否為乙個類的例項 python中說一切皆物件,那麼我們判斷乙個變數是否為某個資料型別的時候,就可以使用isinstance l 1,2,3 print isinstance l,list true 注 l是lis...
Python學習之路 物件導向
物件導向 物件導向的程式設計的核心是物件 相當於你要處於創造者的思維來建立乙個新的東西,如你要實現什麼東西,需要幹什麼才能創造出來 要理解物件為何物。物件導向的程式設計好比作者寫 作者要解決的問題就是使主角從乙個屌絲公升級到大神的故事,作者覺得要讓主角成為大神,會給主角鋪墊從弱到強的大綱,主角很弱時...