2013-06-28 2 views
2

я делаю что-то похожее на следующееPython свойства геттер и сеттер декоратор не отозван

class Parrot(object): 
    def __init__(self): 
     self.__voltage = 100000 

    @property 
    def voltage(self): 
     """Get the current voltage.""" 
     return self.__voltage 

Однако видит свойство напряжения как межды так, когда я зову, как так

p = Parrot() 
print(p.voltage()) 

I get

TypeError: 'int' object is not callable 

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

ответ

8

Весь смысл получателя заключается в том, что он возвращает значение без вызова. p.voltage возвращает целочисленный объект, поэтому работает p.voltage() эквивалентно 100() или что-то в этом роде.

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

+0

Теперь, как я могу сделать это с помощью сеттера? Как 'code'p.voltage (50)' code'? – magwe25

+1

'p.voltage = 50' - точка свойств Python заключается в поддержке атрибутов, которые используют тот же синтаксис, что и простые атрибуты, но могут иметь произвольный код, который запускается при их доступе или настройке. –

+0

Вы использовали декоратор 'voltage.setter' по другому методу, определенному в классе после геттера, который называется« напряжение »и ожидает« self »и аргумент значения. –