[解決済み】TypeError: method()は1つの位置引数を取るが、2つが与えられている
2022-01-27 07:11:21
質問
クラスがあれば...
class MyClass:
def method(arg):
print(arg)
...これはオブジェクトを作成するために使用します...
my_object = MyClass()
...その上で、私は
method("foo")
というように...
>>> my_object.method("foo")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() takes exactly 1 positional argument (2 given)
...なぜPythonは、私が1つしか引数を与えていないのに、2つの引数を与えたと言うのでしょうか?
どのように解決するのですか?
Pythonでは、これ。
my_object.method("foo")
...は 構文糖 を、インタプリタが裏で翻訳している。
MyClass.method(my_object, "foo")
...これは、見ての通り、確かに2つの引数を持っています - ただ、最初の引数は呼び出し側から見て、暗黙的なものです。
これは、ほとんどのメソッドが、呼び出されたオブジェクトに対して何らかの処理を行うため、メソッド内部でそのオブジェクトを参照する方法が必要だからです。慣習として、この最初の引数は
self
メソッド定義の内部で
class MyNewClass:
def method(self, arg):
print(self)
print(arg)
を呼び出すと
method("foo")
のインスタンスで
MyNewClass
であれば、期待通りに動作します。
>>> my_new_object = MyNewClass()
>>> my_new_object.method("foo")
<__main__.MyNewClass object at 0x29045d0>
foo
時折(頻繁ではありませんが)、本当に
しない
メソッドがバインドされているオブジェクトを気にする必要があり、そのような状況下では
飾る
メソッドに内蔵された
staticmethod()
関数でその旨を伝える。
class MyOtherClass:
@staticmethod
def method(arg):
print(arg)
...この場合、"C "マークは必要ありません。
self
という引数をメソッド定義に追加しても動作します。
>>> my_other_object = MyOtherClass()
>>> my_other_object.method("foo")
foo
関連
-
Python カメの描画コマンドとその例
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Python 入出力と高次代入の基礎知識
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] Pythonでシングルトンを作成する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】Flaskのテンプレートが見つからない【重複あり