gpt4 book ai didi

python - Getter 方法与只读属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:01 25 4
gpt4 key购买 nike

已经有类似问题"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

因为当它是查看接口(interface)的属性时(不查看文档和/或源代码),它并不是一个只读的计算属性。当它是一个方法时,很明显它只是一个计算值的 getter ,而不是一个可以由 API 客户端设置的简单属性。

所以我的问题是:何时使用 getter 方法与只读属性?

最佳答案

属性的使用应体现您的意图,并为您的同行提供合理的期望。

何时不使用属性:

  • 当它涉及可能需要非常数时间的计算时。这与访问属性是一件可以快速完成的事情的直觉相反。
  • 当它承载一些外部状态时,除了您的同级访问该属性之外,其他人会更改该状态。这样做会违背两次访问该属性会产生相同结果的直觉。另一方面,当您需要两次方法调用的结果时,您通常将其存储在局部变量中,从而避免它在两次调用之间发生变化。

何时使用属性:

  • 主要是当不使用属性成为一种负担(语法上)时。
  • 当您需要实现特定接口(interface)(duck typing)并且没有其他方法时。

像往常一样,对于此类问题,答案会因人而异,没有硬性规定。在许多情况下,这些准则可能对您很有帮助,但它们并不能消除应用常识的需要。

关于python - Getter 方法与只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20988518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com