【发布时间】:2018-04-24 06:43:28
【问题描述】:
假设我有一个类Foo 存储一些统计数据,我想使用 Python 属性封装对这些数据的访问。这特别有用,例如,当我只存储变量的方差并希望访问其标准偏差时:在这种情况下,我可以定义属性Foo.std 并使其返回方差的平方根。
这种方式的问题是,如果我需要多次访问Foo.std,每次都要计算平方根;此外,由于属性的符号与属性的符号完全相同,因此我的类的用户可能不知道每次访问属性时都在进行计算。
此示例中的一种替代方法是在每次更新方差时计算标准偏差,并将其设置为属性。但是,如果我不需要在每次更新时都访问它,那将是低效的。
我的问题是:当您需要执行昂贵的计算时,有效使用 Python 属性的最佳方法是什么?我应该在第一次调用后缓存结果并在更新时删除缓存吗?还是我应该不使用属性而改用 Foo.get_std() 方法?
【问题讨论】:
-
"是否应该在第一次调用后缓存结果并在更新时删除缓存?"无论是通过属性还是函数提供,您都应该这样做。
-
如果您想向用户提示昂贵的程序,我会将它们作为一个函数公开。除非您所做的一切都同样昂贵或如此之快,否则您不在乎。
-
此外,我不确定您的示例是否是您的真实用例,但是执行完全相同的现有标准(numpy)使用函数来实现这种行为,所以很多人会期望那个。
标签: python properties