2014-08-23 2 views
1

я метод с аннотацией @property в athleteModel.py сценария:Как правильно использовать декоратор @property в python 3?

@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> 

Что не так в моем коде?

+0

Я думаю, python генерирует его вместо меня –

ответ

2

@property только работает на методы, а не на функции.

get_from_store не метод, это функция. Объект property действует как descriptor object, а дескрипторы работают только в контексте классов и экземпляров.

В вашем случае нет необходимости делать get_from_store недвижимостью, действительно. Удалите @property декоратора и просто использовать его как функцию:

athletes = get_from_store() 

Вы не можете иным образом функции верхнего уровня действуют как атрибуты.

+0

Как вы можете быть по функциям и методам? –

+2

@VolodymyrLevytskyi: метод - это функция, связанная с экземпляром. –

Смежные вопросы