如何在Python 3中正确使用@property装饰器?

3 投票
1 回答
1246 浏览
提问于 2025-04-18 18:17

我在 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()

否则,你无法让顶层函数像属性那样使用。

撰写回答