2012-12-16 20 views
10

में ** kwargs का उपयोग करते समय अप्रत्याशित कीवर्ड तर्क I'm baffled। मैं एक उप-वर्ग बनाने की कोशिश कर रहा हूं जो किसी भी कीवर्ड पैरामीटर की परवाह नहीं करता है - बस सुपरक्लास के साथ ही उन्हें पास करता है, और स्पष्ट रूप से कन्स्ट्रक्टर के लिए आवश्यक एक पैरामीटर सेट करता है।कन्स्ट्रक्टर

[email protected]$ python minimal.py 
Traceback (most recent call last): 
    File "minimal.py", line 9, in <module> 
    a = SubClass(optional='foo') 
TypeError: SubClass() got an unexpected keyword argument 'optional' 

साथ

class BaseClass(object): 
    def __init__(self, required, optional=None): 
     pass 

def SubClass(BaseClass): 
    def __init__(self, **kwargs): 
     super(SubClass, self).__init__(None, **kwargs) 

a = SubClass(optional='foo') # this throws TypeError!?!?? 

यह विफल रहता है यह कैसे एक अप्रत्याशित कीवर्ड तर्क जब विधि **kwargs है के बारे में शिकायत कर सकते हैं: यहाँ मेरी कोड का एक सरलीकृत संस्करण है?

(Ubuntu पर अजगर 2.7.3)

उत्तर

18
def SubClass(BaseClass): 

एक समारोह, नहीं एक वर्ग है। कोई त्रुटि नहीं है क्योंकि BaseClass एक तर्क नाम हो सकता है, और नेस्टेड फ़ंक्शंस की अनुमति है। सिंटेक्स मजेदार है, है ना?

class SubClass(BaseClass): 
+8

ओह ठीक है। धन्यवाद।/मैं भाग जाता है और छुपाता है – Leopd

0

सटीक उसी त्रुटि के उत्तर की खोज करते समय इस पोस्ट पर ठोकर खाई, लेकिन अलग-अलग कारण।

मैंने अपनी समस्या (पायथन शुरुआती गलती) का काम किया, लेकिन सोचा कि अगर इसे किसी और की मदद करता है तो मुझे इसे यहां रखना चाहिए।

मेरे परियोजना संरचना:

project\ 
--package1\ 
----Module1.py 
----Module2.py 
--package2\ 
...blah blah blah... 

जहां Module2 फैली Module1, और वर्ग के नाम मॉड्यूल/फ़ाइल नाम

Module2.py में, मैं था के रूप में ही थे:

from package1 import Module1 

यह मानते हुए कि यह कक्षाओं को आयात करेगा।

एक अप्रत्याशित कीवर्ड तर्क त्रुटि प्राप्त जब मैं Module2 क्लास बनाने के लिए

Mod2 = Module2(kw1=var1, kw2=var2) 

from package1.Module1 import Module1 

है [package name].[module name] import [class name]

आशा इस बाकी वहाँ कोई

में मदद करता है का उपयोग करके तय करने की कोशिश की
संबंधित मुद्दे