2013-11-24 87 views
-1

我想保存在本地傳入的關鍵字參數,然後將它們傳遞給另一個方法,然後我有這個錯誤。我可以理解爲什麼我的代碼出現這個錯誤,下面是我的代碼。Python「只需要1位置參數(給出2)」

class A(): 

    def testA(self): 
     self.conf = dict(security='BHP') 
     self.client = B('FE') 
     self.client.addConfigure(**self.conf) 

} 

class B(threading.Thread): 

    def __init__(self, name): 
     threading.Thread.__init__(self) 
     self.ServerProxy = None 

    def run(self): 
     if self.flag == 'X': 
      self.ServerProxy.runX(self.para) 
     elif self.flag == 'Y': 
      self.ServerProxy.runY(self.para) 
     elif self.flag == 'Z': 
      self.ServerProxy.runZ(self.para) 


    def addConfigure(self, **kwargs): 
     self.para = kwargs 
} 

runY定義爲其他類

def runY(self, **kwargs): 

爲什麼誤差

<Fault 1: "<class 'TypeError'>:runY() takes exactly 1 positional argument (2 given)"> 
+2

什麼額外的大括號呢? –

+0

你的意思是哪一行? – Keannylen

+0

兩者。他們讓你的代碼無效。 –

回答

0

ServerProxy彈出是一個實例 你傳遞self.para作爲參數

runY是通過編輯這些參數:

runY(<server_proxy_instance>, <self.para>): 

但這樣定義

runY(self, **kwargs): 

所以什麼名字(鍵),應當你推入**kwself.para

的簡化版本只是使用普通的功能

>>> def foo(x, **kw): 
... pass 
... 
>>> foo("bar", "baz") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: foo() takes 1 positional argument but 2 were given 
+0

這就是self.conf = dict(security ='BHP'),那麼其他人(通常遵循pep8)就更容易理解你的代碼,我用 – Keannylen

+0

也許你的意思是傳遞它像這樣:'self.ServerProxy.runY(** self.para)' –

+0

我試過那樣,但它說'安全'是意外的論據 – Keannylen

相關問題