2016-04-04 2 views
0

Я работаю с библиотекой, которая имеет следующий код для класса Python (под редакцией себя, чтобы найти минимальный рабочий пример):Вызов функции-члена класса дает TypeError

class Foo(object): 

    def __init__(self): 
    self._bar = 0 

    @property 
    def Bar(self): 
    return self._bar 

Если я затем выполнить следующую команду :

foo = Foo() 
x = foo.Bar() 

Я получаю сообщение об ошибке:

TypeError: 'int' object is not callable 

Таким образом, кажется, ошибка говорит мне что он считает, что Bar() является int, а не функцией. Зачем?

ответ

2

это Недвижимость! это означает, что когда вы получаете его как атрибут, это возвращаемое значение, если вы хотите, чтобы он был методом, тогда не делайте его свойством.

Чтобы использовать собственность, просто используйте foo.Bar, и он вернет значение.

2

foo.Bar правильный способ использования

свойство превращает метод класса в только для чтения атрибутов.

class Foo(object): 

     def __init__(self): 
     self._bar = 0 

     @property 
     def Bar(self): 
     return self._bar 

     @Bar.setter 
     def Bar(self, value): 
     self._bar = value 


foo = Foo() 
print(foo.Bar) # called Bar getter 
foo.Bar = 10 # called Bar setter 
print(foo.Bar) # called Bar getter 
Смежные вопросы