2012-02-16 68 views
1

請指出我的代碼中的錯誤。如何使用get/set方法?

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

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

Foo.set(10) 
Foo.get() 

類型錯誤:設置()恰恰2位置參數(1給出)

如何使用__get__()/__set__()

+0

你當然應該包括'self.a = 0'或類似的東西在'__init__'方法了。另外,你不應該在Python中使用簡單的getter/setter。直接改變它:'Foo()。a = 42'。如果你必須驗證你的輸入,你應該使用'property.setter'。 – Gandaro 2012-02-16 18:10:48

回答

3

它們是實例方法。你必須創建的Foo第一個實例:

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

謝謝!告訴什麼是__ get__()'/'__get__()'? – Opsa 2012-02-16 18:17:25

+0

@Opsa:看到這個問題:http://stackoverflow.com/questions/3798835/understanding-get-and-set-and-python-descriptors – mipadi 2012-02-16 18:39:03

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