Python不使用元類建立快取例項

2022-08-01 02:45:14 字數 770 閱讀 1537

問題

當建立類例項時我們想返回乙個快取引用,讓其指向上乙個用同樣引數(如果有的話)建立出來的類例項。

這個問題常常出現在當我們想確保針對一組輸入引數只會有乙個類例項存在時。

解決方法:

使用乙個與類本身相分離的工廠函式:

class

spam:

def__init__

(self, name):

self.name =name

import

weakref

_spam_cache =weakref.weakvaluedictionary()

defget_spam(name):

if name in

_spam_cache:

s =_spam_cache[name]

elif name not

in_spam_cache:

s =spam(name)

_spam_cache[name] =s

return

sa = get_spam("

ioc"

)b = get_spam("

aop"

)print(a is

b)c = get_spam("

aop"

)print(b is c)

執行結果:

false

true

注:弱引用介紹鏈結

python元類的使用 python使用元類

原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...

python元類的使用 Python的元類如何使用

這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串是物件,乙個列表是物...

python元類的使用 Python 元類使用講解

我要一大群的類都具有一種特點,我怎麼給他們加上呢?模板嘛,我從這個模板建立一群類不就ok了?那就需要元類了。定義乙個元類 就是乙個類的模板!莫多想,還要記住這是類級別的,不是物件級別的!如下 class mymeta type def init cls,name,bases,dic print cl...