##單例模式:乙個類只能有乙個例項,它必須自行向整個系統提供這個例項
##裝飾器:對某個功能的包裝
#單例模式只允許建立乙個物件,因此節省記憶體,加快物件訪問速度,因此物件需要被公用的場合適合使用,
#如多個模組使用同乙個資料來源連線物件等等
#用__new__方法(建立乙個例項之後返回這個例項物件)#1
def sing(cls, *args, **kwargs):
s =
def ss():
if cls not in s:
return s[cls]
return sing
#2def singleton(cls, *args, **kwargs):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@sing
class a(object):
def __init__(self, n):
self.n = n
a = a("sasas")
b = a("sssss")
print(id(a), id(b))
print(a is b)
#1# 139968702090912 139968702090912
# true
#2#@singleton
# 140078496682336 140078496682336
# true
class singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, 'ss'): ##hasattr()判斷object物件中是否存在name屬性,name引數是string型別
r = super(singleton, cls)
cls.ss = r.__new__(cls)
return cls.ss
class a(singleton):
def __init__(self, n):
self.n = n
a=a("sa")
b=a("ssds")
print(id(a),id(b)) ##139774188491608 139774188491608
print(a is b) ##true
python 裝飾器和 property裝飾器
裝飾器 1 裝飾器函式的本質 乙個閉包函式 2 裝飾器函式的作用 在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件 3 語法糖 格式 裝飾器名稱 4 建立帶返回值的裝飾器 5 建立傳遞引數的裝飾器 6 裝飾器的固定格式 def f definner args,kwargs ret f ar...
python用類實現裝飾器
利用 call 方法,裝飾器的執行流程 當新增裝飾器語法糖時,會把語法糖的變數名加 執行,並將被裝飾的函式名傳入。所以當類加 執行時,執行了 init 產生的物件就是被裝飾的函式,而物件 執行時觸發 call call方法下就能新增一些新的功能了 import time class timeit d...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...