property屬性 動態計算

2021-10-05 10:14:27 字數 1958 閱讀 4062

from datetime import datetime

from datetime import timedelta

class

bucket

(object):

def__init__

(self, peroid)

: self.peroid_delta = timedelta(seconds = peroid)

self.reset_time = datetime.now(

) self.max_quota =

0 self.quota_consume =

0 @property

defquota

(self)

:return self.max_quota - self.quota_consume

@quota.setter

defquota

(self, amount)

: delta = self.max_quota - amount

if amount ==0:

self.quota_consume =

0 self.max_quota =

0elif delta <0:

assert self.quota_consume ==

0 self.max_quota = amount

else

:assert self.max_quota >= self.quota_consume

self.quota_consume += delta

def__repr__

(self)

:return

('bucket(max_quota = %d, quota_consume= %d)'

%(self.max_quota, self.quota_consume)

)def

fill

(bucket, amount)

: now = datetime.now(

)if now - bucket.reset_time > bucket.peroid_delta:

bucket.quota =

0 bucket.peroid_delta =

0 bucket.quota += amount

defdeduct

(bucket, amount)

:'''

上面的操作缺點是無法得知漏桶的初始配額。初始配額會在每個週期內持續流失,如果降到0,那麼deduct就總是返回false

此時依賴deduct的那些操作就會受到阻礙,但是我們沒有辦法判斷出是bucket裡面所剩的配額不足還是根本就沒有配額。

'''now = datetime.now(

)if now - bucket.reset_time > bucket.peroid_delta:

return

false

if bucket.quota - amount <0:

return

false

bucket.quota -= amount

return

true

bucket = bucket(60)

print

('initial'

, bucket)

fill(bucket,

100)

print

('filled'

, bucket)

if deduct(bucket,99)

:print

('had 99'

)else

:print

('not enough for 99'

)print

('now'

, bucket)

print

(bucket.quota)

property屬性引數

1.讀寫屬性 預設是readwrite,會生成getter和setter方法 如果是readonly表示只會生成getter方法 2.setter處理 預設是assign 賦值 因此基本資料型別不需要加這個引數。因為在setter方法裡,我們經常要將乙個物件賦值給類的成員屬性,這個時候根據記憶體管理...

Property 屬性動畫

單個屬性動畫 objectanimator offloat view,rotationx 0,180 setduration 3000 start 多個屬性動畫 多個屬性動畫組合 設定乙個中心點 view.setpivotx 0.5f view.setpivoty 0.5f 方式一 建立多個屬性動畫...

屬性(Property)動畫

屬性動畫與補間動畫的區別 最大的區別是補間動畫就算控制項移動到任何位置,控制項本身位置還是不變。而屬性動畫是直接改變控制項的位置。從某種角度看,屬性動畫是增強版的補間動畫,其強大體現在兩方面 補間 tween 動畫只能定義兩個關鍵幀在透明度 旋轉 傾斜 位移這4個方面的變化,而屬性動畫可以定義任何屬...