Python3のクラスメソッドで位置引数を0個取るが、1個与えられたというエラーが発生する
2022-02-23 08:33:08
問題:Pythonオブジェクト指向の学習中、プログラムがエラーを報告する位置引数が0個だが、1個与えられている
まず、次のようにクラスを定義します。
# Define a class
class cat:
#properties
#methods
def eat():
print("The cat can eat. ")
def catch():
print("The cat can catch the mouse")
# Create an object
tom=cat()
# Call the method in the object pointed to by tom
tom.catch()
実行すると、プログラムがエラーを報告します: catch() は位置引数を 0 個取りますが、1 個が与えられました。
これは、catch()メソッドに位置引数がないのに、1つ指定されたことを意味します。
調べてみると、Pythonがクラスでメソッドを定義する場合、パラメータとしてカレントオブジェクトのアドレスが渡されるため、一般的にクラスでメソッドを定義する場合、そのメソッドに少なくとも1つのパラメータを定義しなければならないことがわかりました。
一般的には "self" と名付けますが、インスタンスメソッドの最初のパラメータは self と呼ぶ必要はなく、実際には a,b,c など、どんなパラメータ名でも構いません。ただ、慣習的にパラメータに self と名付けると、コードが読みやすくなります。
修正したコード
#Define a class
class cat:
#properties
#methods
def eat(lf):
print("The cat can eat. ")
def catch(elf):
print("The cat can catch the mouse")
# Create an object
tom=cat()
# Call the method in the object pointed to by tom
tom.catch()
注:関連情報です。
- 原文のままです。クラスで定義されたメソッドは、デフォルトではインスタンスメソッドです。インスタンスメソッドを定義するメソッドは基本的に関数を定義するメソッドと同じですが、インスタンスメソッドの最初の引数はメソッドの呼び出し側(クラスのインスタンス)に束縛されます - したがってインスタンスメソッドは少なくとも一つの引数を定義しなければならず、その引数は通常 self という名前になるでしょう。---- クレイジーPythonレクチャーノートより
2)
---- ルーキーティーチより https://www.runoob.com/python/python-object.html
関連
-
Pythonの実行時にSyntaxError: invalid syntaxが発生した場合の対処方法
-
Pythonでbs4をインストールした後、pycharmがModuleNotFoundErrorを報告しました。bs4' という名前のモジュールがありません。
-
python3.x: urllib2' という名前のモジュールがない
-
Python3 xlsxwriterモジュールのインストール
-
np.random.multivariate_normalメソッド解析
-
[Python 標準ライブラリ] math--math 関数
-
Python djangoプログラミングエラーのコツ、自作プログラミングで遭遇したエラーのまとめ 2018年11月8日更新
-
Pythonのエラーについて。TypeError: += でサポートされていないオペランドタイプ: 'builtin_function_or_method' および 'int' です。
-
Pythonのjson.loadsで文字列のデコードに失敗しました。ValueError: JSONオブジェクトをデコードできませんでした
-
Pythonソケットプログラミング [WinError 10061] ターゲットコンピュータがアクティブに拒否しているため、接続できない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX2 解決策
-
AttributeError: 'function' オブジェクトに 'split' 属性がない Solution
-
python3 のモジュール "importlib._bootstrap" に "SourceFileLoader" という属性がない問題を解決する。
-
Python ModuleNotFoundError: ConfigParser' という名前のモジュールはありません。
-
Pythonでナンバープレート自動認識システムを作ろう!楽しくて実用的です。
-
Python辞書
-
dict_keys' オブジェクトはインデックス作成ソリューションに対応していません。
-
アルゴリズム図 1.2 二項対立型ルックアップ TypeError: リストのインデックスは整数またはスライスでなければならず、float ではありません 解答
-
Anaconda 詳細インストールおよび使用チュートリアル(画像付き)
-
tkinter モジュールを使った Python 倉庫番ゲーム