cached property快取裝飾器

2021-10-07 18:27:29 字數 1581 閱讀 3748

class

cached_property

(object):

def__init__

(self, func, name=

none):

self.func = func

self.__doc__ =

getattr

(func,

'__doc__'

) self.name = name or func.__name__

def__get__

(self, instance, cls=

none):

if instance is

none

:return self

print

(self)

print

(self.func)

# function user.getworkyear

print

(instance)

# <__main__.user object

# self.func(instance) 相當於 getworkyear(user)

# 呼叫示例方法 getworkyear 把 自己傳進去

# getworkyear(self) = getworkyear(instance) = self.func(instance)

res = instance.__dict__[self.name]

= self.func(instance)

return res

class

user

(object):

def__init__

(self, age=0)

: self.age = age

@cached_property

defgetworkyear

(self)

:return

65- self.age

user = user(20)

print

(user.__dict__)

print

(user.getworkyear)

# 45

# print(user.getworkyear()) # error

print

(user.__dict__)

# print

(user.getworkyear)

# 45

<main.cached_property object at 0x000002a8d3462898>

<main.user object at 0x000002a8d34628d0>

4545

cached_property主要實現的功能是,user.getworkyear第一次會進行計算,計算完之後把例項user的__dict__[『getworkyear』]設定為計算後的值。下次讀值的時候會直接從__dict__[『getworkyear』]取結果,避免了多次計算。

使用限制:只能用於只帶預設引數的類

django rest framework快取應用

在我們web製作過程中進場使用到快取技術,那麼今天python中的一種簡單便捷的快取技術與大家分享 以下是在省 市 區 聯動的位址查詢做的快取處理 使用快取 省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。在django rest...

WPF與緩動 四 弧形緩動

wpf與緩動 四 弧形緩動 周銀輝 弧形緩動就是其緩動曲線為一段圓弧,如何我們假設圓弧上的點的斜率為速度的話,那麼可以想像其速度的變化多麼具有戲劇性,其加速或減速來得很突然,與5次緩動差不多.參考以下 圓形緩動 protected override double getcurrentvaluecor...

深度緩紋理

create a texture object storing color glgentextures 1,m udepthtexid glbindtexture gl texture 2d,m udepthtexid gltexparameterf gl texture 2d,gl texture...