1. 程式人生 > 其它 >單例模式及pickle模組

單例模式及pickle模組

單例模式及pickle模組

單例模式

​ 在IT行業中一共有23種設計模式,這些設計模式又可以分為三大類:建立型、結構型、行為型。設計模式是前輩們發明用於解決固定問題的固定套路。

​ 我們今天講一下23種設計模式中的單例模式:單例模式的意思是一個類只能夠產生一個物件,用於節省資源。

class Single(type):
    new_obj = None
    def __call__(self, *args, **kwargs):
        if not self.new_obj:
            obj = super().__call__(*args, **kwargs)
            self.new_obj = obj
            return self.new_obj
        return self.new_obj

class MyClass(metaclass=Single):
    def __init__(self,name):
        self.name = name


obj1 = MyClass('oscar')
obj2 = MyClass('jason')
print(MyClass.new_obj)
print(id(obj1),id(obj2))
print(obj1.__dict__,obj2.__dict__)

pickle模組

該模組只支援python,相容性很差,但是該模組可以將物件儲存到檔案中,並且取出來之後還可以使用物件的功能。

import pickle

class MyClass():
    def __init__(self,name):
        self.name = name
    def run(self):
        return '你好'

obj = MyClass('oscar')

# with open('oscar','wb') as f:  # 只支援二進位制模式,所以要用b模式
#     pickle.dump(obj,f)  # 儲存到檔案
#
with open('oscar','rb') as f:
    res = pickle.load(f)  # 讀取檔案

print(res.name)  # oscar
print(res.run())  # 你好

通過物件獲取類對應的字串名稱

class MyClass():
    def __init__(self,name):
        self.name = name
        
# 固定方法
obj = MyClass('oscar')
print(obj.__class__.__name__)  # MyClass

這裡是IT小白陸祿緋,歡迎各位大佬的指點!!!