このエラーが発生しています
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()
構文はpython 3に固有のようです。では、2.xと3.xの間で互換性のあるコードを提供し、このエラーの発生を回避する最良の方法は何でしょうか。
はい、引数が0の構文はPython 3に固有です- Python 3.0の新機能 および PEP 3135-新しいスーパー .
Python 2およびバージョン間の互換性が必要なコードでは、クラスオブジェクトとインスタンスを明示的に渡すだけにしてください。
はい、super()
の引数なしバージョンをPython 2(future
ライブラリなど)で機能させる「バックポート」がありますが、これらには以下を含む多くのハックが必要です。 クラス階層の完全スキャン 一致する関数オブジェクトを見つけます。これは壊れやすく、低速であり、「利便性」に値するものではありません。
これは、Pythonのバージョンが原因です。 [python --version]でpythonバージョンを確認してください。2.7
In 2.7 use this [ super(baseclass, self).__init__() ]
class Bird(object):
def __init__(self):
print("Bird")
def whatIsThis(self):
print("This is bird which can not swim")
class Animal(Bird):
def __init__(self):
super(Bird,self).__init__()
print("Animal")
def whatIsThis(self):
print("THis is animal which can swim")
a1 = Animal()
a1.whatIsThis()
> In 3.0 or more use this [ super().__init__()]
class Bird(object):
def __init__(self):
print("Bird")
def whatIsThis(self):
print("This is bird which can not swim")
class Animal(Bird):
def __init__(self):
super().__init__()
print("Animal")
def whatIsThis(self):
print("THis is animal which can swim")
a1 = Animal()
a1.whatIsThis()
デフォルトのpython --version
はおそらくpython2であるため、この構文を使用するにはpython3に切り替える必要があります。そうするには、次のコマンドを端末に貼り付けます。
Sudo update-alternatives --config python
「pythonの代替がない」というエラーが表示された場合は、次のコマンドを使用して自分で代替を設定します。
Sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
次にpythonバージョンを確認します
python --version
バージョン3. +を入手すれば、問題は解決します。