已经有类似的问题"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只读属性?
答案 0 :(得分:4)
物业的使用应该符合您的意图,并为您的同行提供合理的期望。
何时不使用财产:
何时使用属性:
与往常一样,这些问题的答案取决于品味,并且没有硬规则。在许多情况下,这些指南可能对您有所帮助,但它们并不能消除应用常识的需要。