【问题标题】:How to use @property decorator correctly in python 3?如何在 python 3 中正确使用 @property 装饰器?
【发布时间】:2014-10-17 05:25:45
【问题描述】:

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

我的代码有什么问题?

【问题讨论】:

  • 我以为是python而不是我生成的

标签: python python-3.x properties decorator python-decorators


【解决方案1】:

@property 仅适用于方法,不适用于函数。

get_from_store 不是方法,而是函数。 property 对象充当 descriptor object 并且描述符仅在类和实例的上下文中工作。

在您的情况下,真的不需要将get_from_store 设为属性。移除 @property 装饰器,然后像函数一样使用它:

athletes = get_from_store()

否则,您不能使顶级函数像属性一样。

【讨论】:

  • 函数和方法有何不同?
  • @VolodymyrLevytskyi:方法是绑定到实例的函数。
猜你喜欢
  • 2019-11-17
  • 2017-01-25
  • 2014-06-08
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多