Python類屬性的延遲計算

2022-10-04 21:33:28 字數 1249 閱讀 3935

所謂類屬性的延遲計算就是將類的屬性定義成乙個property,只在訪問的時候才會計算,而且一旦被訪問後,結果將會被快取起來,不用每次都計算。

優點構造乙個延遲計算屬性的主要目的是為了提公升效能

實現class lazyproperty(object):

def __init__(self, func):

self.func = func

def __get_www.cppcns.com_(self, instance, owner):

if instance is none:

return self

else:

value = self.func(instance)

setattr(instanc程式設計客棧e, self.func.__name__, value)

return value

import math

class circle(object):

def __init__(self, radius):

self.radius = radius

@lazyproperty

def area(self):

print 'computing area'

return math.pi * self.radius ** 2

@lazyproperty

def perimeter(self):

print 'computing perimeter'

return 2urfbeulgq * math.pi * self.radius

說明定義了乙個延遲計算的裝飾器類lazyproperty。circle是用於測試的類,circle類有是三個屬性半徑(radius)、面積(area)、周長(perimeter)。面積和周長的屬性被lazyproperty裝飾,下面來試試lazyproperty的魔法:

>>> c = circle(2)

>>> print c.area

curfbeulgqomputing程式設計客棧 area

12.5663706144

>>> print c.area

12.5663706144

在area()中每計算一次就會列印一次「computing area」,而連續呼叫兩次c.area後「computing area」只被列印了一次。這得益於lazyproperty,只要呼叫一次後,無論後續呼叫多少次都不會重複計算。

本文標題: python類屬性的延遲計算

本文位址:

python 類屬性 用處 Python類屬性詳解

類屬性1.類定義後就存在,而且不需要例項化 2.類屬性使得相同類的不同例項共同持有相同變數 類屬性例項 attrb.py class testcss cssa class attribe def init self self.a 0 self.b 10 def info self print a s...

python限定類屬性的類屬性 slots

slots 由於python是動態語言,任何例項在執行期都可以動態地新增屬性。如果要限制新增的屬性,例如,student類只允許新增 name gender和score 這3個屬性,就可以利用python的乙個特殊的 slots 來實現。顧名思義,slots 是指乙個類允許的屬性列表 class s...

Python類屬性,例項屬性

dreamfor的部落格 1.python類資料屬性 定義在類裡面但在函式外面的變數,它們都是靜態的。一段很簡單的 但反應了很多 class a a 1 乙個類裡面有個屬性a a a b a a.a b.a a.a 這個屬效能被例項和類訪問 a.a 2 b.a a.a 改變例項a的屬性a,例項b和類...