【Python】TypeError: __init__() missing 1 required positional argumentsの原因と解決方法

時計 2020.08.02 / 時計

【Python】TypeError: __init__() missing 1 required positional argumentsの原因と解決方法

TypeErrorの一つ、__init__() missing 1 required positional argumentsについて解説していきます。

Pythonを使い始めた頃は、よくこのエラーが発生していましたが、いまだにこのタイプのエラーが発生することがあります。

ちょっとしたミスで引き起こされるエラーですが、なにが起因となって発生してしまうのか。
エラーの意味や発生原因を解説していきます。

TypeErrorの意味

早速ですが、このエラーの意味を説明します。
まずこのエラーは以下のような構文にのっとって表示されます。

TypeError:関数名() missing 数値 required positional arguments: 引数名など

エラーは英語で表記されますが、これを日本語に翻訳すると以下のようになります。

「TypeError:関数()に必要な引数が数値分足りないです」
といった意味になります。

これはどういった意味かというと、関数に渡すべき引数が数値分足りていないということですね。

ではこのエラーを解決するためには、関数に必要な数の引数を渡すようにすればいいということです。

どういった状況でこのエラーが発生するのか、どうやって解決するのかを次項から解説していきます。

クラス内の関数呼び出し時の注意

エラー発生ケースを確認していく前に、クラス内の関数を呼び出す場合の注意を見ていきましょう。

Python独特の仕様ですが、クラス内の関数を呼び出す際にselfが引数の1つ目としてクラス内関数に渡されます。

class Office:
	def __init__(self):
		print('Office54')
x = Office()	#インスタンス化

上記のサンプルプログラムで詳しく説明すると、4行目でインスタンス化した際にコンストラクタである__init__関数が走ります。

そして先ほど説明したように、__init__にselfが渡されます。
そのため__init__(self)と引数selfを受け取る記述が必要になります。

以上を前提条件として、TypeError: __init__() missing 1 required positional argumentsの発生パターンや解決策を解説していきます。

渡す引数が少ない場合

class Office:
	def __init__(self, x):
		print('Office54' + x)
x = Office()
結果

TypeError: __init__() missing 1 required positional argument: 'x'

すでにエラーの意味がわかっているので、渡すべき引数xが足りていないことはおわかり方と思います。

このエラーを解決するために、xを__init__関数に渡すように書き直してみます。

class Office:
	def __init__(self, x):
		print('Office54' + x)
x = Office(‘.net’)
結果

Office54.net

以上のように無事エラーが発生せずにプログラムを実行することができます。

したがって、このようにコンストラクタで引数を設定しているのに、それを渡していない場合にエラーが発生いたします。

またコンストラクタにかかわらず、関数に対して渡す引数の数が足りていない場合、同様にエラーが発生いたします。

インスタンス化がない場合

class Office:
	def five_four(self):
		print(‘Office54’)

Office.five_four()
結果

TypeError: five_four() missing 1 required positional argument: 'self'

上記のサンプルプログラムでは、Officeクラス内のfive_four関数を呼び出して、エラーが発生しました。

本来クラスはインスタンス化して使うべきですが、サンプルではインスタンス化していないため、エラーが発生しております。

この場合は、クラスをインスタンス化してから使えばエラーを避けることができます。

class Office:
	def five_four(self):
		print('Office54')
x = Office()
x.five_four()

逆に多く引数を渡した場合のエラー

今回のエラーTypeError: __init__() missing 1 required positional argumentsは、関数に渡す引数が少ない場合に発生するエラーです。

では逆に多く引数を渡すとどうなるか?

答えは、以下の記事に記載しているので、気になる方はご覧ください。