Getter方法vs只读属性

时间:2014-01-08 06:32:02

标签: python

已经有类似的问题"When and how to use the builtin function property() in 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只读属性?

1 个答案:

答案 0 :(得分:4)

物业的使用应该符合您的意图,并为您的同行提供合理的期望。

何时不使用财产:

  • 当涉及可能需要非恒定时间的计算时。这将抵制直接访问属性是一件很快的事情。
  • 当它承受某种外部状态时,由其他人改变,而不是您的同伴访问该属性。这样做会抵消两次访问属性产生相同结果的直觉。另一方面,当您需要两次方法调用的结果时,通常将其存储在局部变量中,从而避免它在两者之间发生变化。

何时使用属性:

  • 主要是在不使用属性时会成为负担(语法上)。
  • 当您需要实现特定的界面(鸭子打字)时,没有其他办法可以做到。

与往常一样,这些问题的答案取决于品味,并且没有硬规则。在许多情况下,这些指南可能对您有所帮助,但它们并不能消除应用常识的需要。