Как использовать методы get / set? - PullRequest
1 голос
/ 16 февраля 2012

Пожалуйста, укажите, где ошибка в моем коде.

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

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

Foo.set(10)
Foo.get()

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

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

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

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

f = Foo()
f.set(10)
f.get()    # Returns 10
3 голосов
/ 17 февраля 2012

Как использовать __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
...