2014-01-08 78 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

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

当不使用属性:当它涉及可能采取非固定时间计算

  • 。这将抵制直觉,即访问属性是一件很快的事情。
  • 当它承受一些外部状态时,由其他人改变,而不是你的对等体访问该属性。这样做会抵消直接访问属性两次产生相同结果的直觉。另一方面,当你需要两次方法调用的结果时,通常将它存储在一个局部变量中,从而避免它在两者之间变化。

何时使用性能:

  • 主要不使用属性时成为负担(语法)。
  • 当你需要实现一个特定的接口(鸭打字),并没有其他的方式来做到这一点。

像往常一样这样的问题,答案很容易受到质疑,没有硬性规定。这些指导方针在很多情况下可以很好地为您服务,但它们并没有消除应用常识的需要。