python之路 物件導向之單例模式

2021-08-26 05:24:59 字數 2652 閱讀 7998

什麼是單例模式

基於某種實現方式,例項化產生的多個物件是同乙個(指向同乙個記憶體位址)--->以節省記憶體

實現方式一:通過類繫結方法

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學習之路 物件導向

物件導向 物件導向的程式設計的核心是物件 相當於你要處於創造者的思維來建立乙個新的東西,如你要實現什麼東西,需要幹什麼才能創造出來 要理解物件為何物。物件導向的程式設計好比作者寫 作者要解決的問題就是使主角從乙個屌絲公升級到大神的故事,作者覺得要讓主角成為大神,會給主角鋪墊從弱到強的大綱,主角很弱時...