2014-01-08 73 views
2

已經有一個類似的問題"When and how to use the builtin function property() in python",但我這一個是不同的。Getter方法vs只讀屬性

我有一個需要一個方法來獲得的一些工作進展計數器類:

class Downloader(): 

    def __init__(self, max_workers): 
     self.executor = ThreadPoolExecutor(max_workers) 

    @property 
    def unfinished_tasks_count(self): 
     return self.executor._work_queue.unfinished_tasks 

我認爲這是更好地做到:

class Downloader(): 

    ... 

    def get_unfinished_tasks_count(self): 
     return self.executor._work_queue.unfinished_tasks 

,因爲當它的屬性看界面(無需查看文檔和/或源代碼),它並不是顯式的,它是隻讀的計算屬性。當它是一種方法時,顯然它只是一個計算值的獲取者,並不是一個可由API客戶端設置的簡單屬性。

所以我的問題是:何時使用getter方法vs只讀屬性?

+0

我想如果你想要它_read-only_,一個getter函數會更好。 – aIKid

回答

3

物業的使用應該承擔你的意圖,併爲你的同行提供合理的期望。

當不使用屬性:當它涉及可能採取非固定時間計算

  • 。這將抵制直覺,即訪問屬性是一件很快的事情。
  • 當它承受一些外部狀態時,由其他人改變,而不是你的對等體訪問該屬性。這樣做會抵消直接訪問屬性兩次產生相同結果的直覺。另一方面,當你需要兩次方法調用的結果時,通常將它存儲在一個局部變量中,從而避免它在兩者之間變化。

何時使用性能:

  • 主要不使用屬性時成爲負擔(語法)。
  • 當你需要實現一個特定的接口(鴨打字),並沒有其他的方式來做到這一點。

像往常一樣這樣的問題,答案很容易受到質疑,沒有硬性規定。這些指導方針在很多情況下可以很好地爲您服務,但它們並沒有消除應用常識的需要。