2012-02-16 7 views
1

Укажите, где ошибка в моем коде.Как использовать методы get/set?

class Foo: 
    def get(self): 
     return self.a 

    def set(self, a): 
     self.a = a 

Foo.set(10) 
Foo.get() 

TypeError: набор() принимает ровно 2 позиционные аргументы (1) данные

Как использовать __get__()/__set__()?

+0

Конечно, вы должны включать 'self.a = 0 'или что-то подобное, что в' __init__' метод тоже. Кроме того, вы не должны использовать тривиальные getters/setters в Python. Просто измените его прямо: 'Foo(). A = 42'. Если вам нужно подтвердить свой ввод, вы должны использовать 'property.setter'. – Gandaro

ответ

3

Это методы экземпляра. Вы должны создать экземпляр Foo первого:

f = Foo() 
f.set(10) 
f.get() # Returns 10 
+0

Спасибо! Скажите, что такое '__ get__()'/'__get__()'? – Opsa

+0

@Opsa: Посмотрите на этот вопрос: http://stackoverflow.com/questions/3798835/understanding-get-and-set-and-python-descriptors – mipadi

3

How to use __get__()/__set__() ?

как это, если у вас есть Python3. Дескрипторы в Python2.6 не хотят работать должным образом для меня.

Python v2.6.6

>>> class Foo(object): 
...  def __get__(*args): print 'get' 
...  def __set__(*args): print 'set' 
... 
>>> class Bar: 
...  foobar = Foo() 
... 
>>> x = Bar() 
>>> x.foobar 
get 
>>> x.foobar = 2 
>>> x.foobar 
2 

Python v3.2.2

>>> class Foo(object): 
...  def __get__(*args): print('get') 
...  def __set__(*args): print('set') 
... 
>>> class Bar: 
...  foobar = Foo() 
... 
>>> x = Bar() 
>>> x.foobar 
get 
>>> x.foobar = 2 
set 
>>> x.foobar 
get 
Смежные вопросы