2014-12-31 75 views
0

我使用Python 3,並且對kwargs有小問題。是否有可能使用實例屬性作爲默認參數值?我的意思是這樣的:實例屬性作爲默認參數

class foo: 
    def __init__(self, a,b): 
     self.a = a 
     self.b = b 

    def setNewA(self, a=self.a): 
     print(a) 

但我得到了一個錯誤:

NameError: name 'self' is not defined 

如果我使用類的名字,我已經有了:

AttributeError: type object 'foo' has no attribute 'a' 

我知道,其他方法是用這樣的東西:

def setNewA(self, a=None): 
     a = a or self.a 
     print(a) 

但是m有沒有辦法做到這一點?

+0

您缺少兩個方法定義中的'self'參數。不,你不能使用實例屬性作爲默認參數;在創建方法時它們不存在。 – jonrsharpe

+0

你的方法會錯過一個'self'作爲他們的第一個參數,在那裏存儲對象的引用。請參閱[這裏](https://docs.python.org/3/tutorial/classes.html#method-objects)。 – zegkljan

+0

你是對的,我在我的帖子中修正了錯別字 – voldi

回答

0

不確定這是否適合您的使用情況,但是如何呢?

>>> class foo: 
... b = 1 
... 
... def setNewA(self, a=b): 
...  print(a) 
>>> 
>>> f = foo() 
>>> f.setNewA() 
1 
>>> f.setNewA(2) 
2