15

私は困惑しています。キーワード パラメータを気にしないサブクラスを作成しようとしています。それらをすべてそのままスーパークラスに渡し、コンストラクタに必要な 1 つのパラメータを明示的に設定します。これが私のコードの簡略版です:

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!?!??

これは失敗します

leo@loki$ 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'

メソッドに**kwargs.

(Ubuntu では Python 2.7.3)

4

2 に答える 2

20
def SubClass(BaseClass):

クラスではなく関数です。BaseClass引数名になる可能性があり、ネストされた関数が許可されているため、エラーはありません。構文は楽しいですね。

class SubClass(BaseClass):
于 2012-12-16T01:51:15.997 に答える
2

まったく同じエラーに対する回答を検索しているときに、この投稿に出くわしましたが、原因は異なります。

私は自分の問題 (python の初心者の間違い) を解決しましたが、他の人の助けになる場合に備えて、ここに掲載する必要があると考えました。

私のプロジェクト構造:

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]

これが他の誰かに役立つことを願っています

于 2015-03-10T05:35:17.137 に答える