python用裝飾器和 new

2021-09-16 22:24:24 字數 1368 閱讀 8907

##單例模式:乙個類只能有乙個例項,它必須自行向整個系統提供這個例項

##裝飾器:對某個功能的包裝

#單例模式只允許建立乙個物件,因此節省記憶體,加快物件訪問速度,因此物件需要被公用的場合適合使用,

#如多個模組使用同乙個資料來源連線物件等等

#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

#用__new__方法(建立乙個例項之後返回這個例項物件)

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裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...