1. ホーム
  2. python

[解決済み】TypeError: super() takes at least 1 argument (0 given) error is specific to any python version?

2022-02-19 06:01:23

質問内容

次のようなエラーが発生します。

TypeError: super() は少なくとも1つの引数を取ります (0 が指定されています)

Python2.7.11でこのコードを使っています。

class Foo(object):
    def __init__(self):
        pass

class Bar(Foo):
    def __init__(self):
        super().__init__()

Bar()

それを実現するための回避策は、次のようになります。

class Foo(object):
    def __init__(self):
        pass

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()

Bar()

Python3特有の構文のようです。2.xと3.xの間で互換性のあるコードを提供し、このエラーが発生しないようにするには、どのような方法があるでしょうか?

解決方法は?

はい、0-引数の構文はPython 3に特有のものです。 Python 3.0での新機能 PEP 3135 --。 新型スーパー .

Python 2やクロスバージョン互換性が必要なコードでは、クラスオブジェクトとインスタンスを明示的に渡すことに専念してください。

はい、バックポートがあります。 super() は Python 2 で動作します (たとえば future を含む多くのハックが必要です。 クラス階層のフルスキャン を使用して、一致する関数オブジェクトを見つけます。これは壊れやすく遅いので、単に便利さに見合うものではありません。