1. ホーム

Python Basics-TypeError: 位置引数を2つ取るが、3つ与えられている

2022-02-16 08:32:59

エラーです。

  今日、簡単なクラス定義のpythonのコードを書いていて、エラーに遭遇しました。TypeError: drive()は2つの位置引数を取りますが、3つが与えられました。

コードは以下の通りです。

class Car:
    speed = 0
    def drive(self,distance):
        time = distance / self.speed
        print(time)

bike = Car()
bike.speed=60
bike.drive(60,80)

トラブルシューティングの結果、クラス定義の def drive (selef, distance) メソッドの self パラメータに問題があることがわかりました。

では、Pythonのselfの基本を簡単に説明します。

self クラス自体のインスタンスを作りたい場合、selfは作成されたインスタンス自身を指すので、メソッド内部でselfに様々なプロパティをバインドすることができます。インスタンスを作成するときは、空の引数を渡すことはできず、メソッドにマッチした引数を渡す必要がありますが、selfは渡す必要がなく、Pythonインタプリタがインスタンス変数そのものを渡してくれます。

<スパン そこで、2つのソリューションがあります。

方法1:パラメータを1つだけ渡す、2つのパラメータを渡したい場合は方法2を見る

class Car:
    speed = 0
    def drive(self,distance):
        time = distance / self.speed
        print(time)

bike = Car()
bike.speed=60
bike.drive(80)

方法2

class Car:
    speed = 0
    def drive(self,distance,speed):
        time = distance / speed
        print(time)
bike = Car()
bike.drive(80,50)