簡體   English   中英

Getter方法vs只讀屬性

[英]Getter method vs read-only property

已經有一個類似的問題“何時以及如何在python中使用內置函數屬性()” ,但我認為這是一個不同的問題。

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

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

因為當它查看接口的屬性時(不查看文檔和/或源代碼),它不是顯式的,它是一個只讀的計算屬性。 當它是一個方法時,很明顯它只是一個計算值的getter,它不是一個可以由API客戶端設置的簡單屬性。

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

物業的使用應該符合您的意圖,並為您的同行提供合理的期望。

何時不使用財產:

  • 當它涉及可能需要非恆定時間的計算時。 這將抵消直接訪問屬性是一件很快的事情。
  • 當它有一些外部狀態時,由其他人改變,而不是你的同伴訪問該屬性。 這樣做會抵消兩次訪問屬性產生相同結果的直覺。 另一方面,當您需要兩次方法調用的結果時,通常將其存儲在局部變量中,從而避免它在兩者之間發生變化。

何時使用屬性:

  • 主要是當不使用屬性成為負擔(語法上)。
  • 當你需要實現一個特定的接口(鴨子打字),沒有其他方法可以做到這一點。

像往常一樣,這些問題的答案取決於品味,並且沒有硬性規則。 在許多情況下,這些指南可能對您有用,但它們不會消除應用常識的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM