2017-07-22 2 views

Antwort

1

Statt Schlüsselwort Argumente Sie ein einzelnes Positions Argument übergeben haben. Die Methode akzeptiert keine Positionsargumente, die über das implizite Instanzargument hinausgehen. Erweitern Sie das Wörterbuch beim Übergeben.

Test_class(**dic) 
+0

Danke, Kumpel :) –

1

Sie definieren Ihr __init__ ein Argument genannt, aber Sie sind in einem Positions Argument übergeben. Um auf der Grundlage Ihrer Definition, um richtig die Klasse zu instanziiert, Sie ein richtiges benannte Argument zur Verfügung stellen müssen, oder auspacken Ihr Wörterbuch in Ihrem Anruf:

Test_class(**dic) 

Wenn Sie ein explizites benannte Argument stattdessen übergeben mag, können Sie wäre dann so etwas wie tun: Doch

Test_class(some_arg=dic) 

auf, was Sie zu tun versuchen, ich glaube, Sie versuchen, die erste Lösung zu tun, wo Sie wollen Ihr Wörterbuch passieren und den „Schlüssel“, wie die Verwendung Argumentname.

Beachten Sie, wie Sie Ihre Fehler hier wiedergegeben wird, und dann korrigiert:

>>> class Test_class(object): 
...  def __init__(self,**kwargs): 
...   for a in kwargs.values(): 
...    print(a) 
... 
>>> dic = {"a_list":1} 
>>> 
>>> Test_class(dic) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: __init__() takes exactly 1 argument (2 given) 
>>> Test_class(a=dic) 
{'a_list': 1} 
<__main__.Test_class object at 0x10b505a10> 
>>> 

Verwendung auspacken:

>>> Test_class(**{"a_list":1}) 
1 
<__main__.Test_class object at 0x10b505a90> 
>>> 
+1

Sie für eine große Erklärung danken, Kumpel :) –

0
class Test_class(object): 
    def __init__(self,*args,**kwargs): 
     print args 
     for a in kwargs.values(): 
      print a 

dic = {"a_list":1} 

Test_class(dic) 

nach Ihren Code nimmt es als args nicht als kwargs, für kwargs Anruf

Test_class(**dic) 

oder so nennen:

Test_class(a_list = 1) 
+0

Prost :) Vielen Dank :) –

Verwandte Themen