2012-02-16 67 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