如何在Python 3中正确使用@property装饰器?
我在 athleteModel.py
脚本中有一个用 @property
标记的方法:
@property
def get_from_store():
with open(athleteFilePath,'rb') as pickleFile:
athleteMap = pickle.load(pickleFile)
print('Loaded athleteMap ',athleteMap)
return athleteMap
我在另一个脚本中使用了这个方法:
from athleteModel import get_from_store
athletes = get_from_store
print(yate.u_list(athletes[athName].sortedTimes))
在最后一行(print
方法)我遇到了一个异常:
TypeError: 'function' object is not subscriptable
args = ("'function' object is not subscriptable",)
with_traceback = <built-in method with_traceback of TypeError object>
我的代码哪里出问题了?
1 个回答
4
@property
只能用在 方法 上,而不能用在函数上。
get_from_store
不是一个方法,它是一个函数。property
对象就像一个 描述符对象,而描述符只在类和实例的上下文中起作用。
在你的情况下,真的没有必要把 get_from_store
变成一个属性。只需去掉 @property
装饰器,像使用函数一样直接调用它就可以了:
athletes = get_from_store()
否则,你无法让顶层函数像属性那样使用。