このタイプのエラーが発生したときに考慮すべき他のこと:
私はこのエラーメッセージに遭遇し、この投稿が役に立ちました。私の場合、__init__()
オブジェクトの継承があった場所をオーバーライドしたことがわかりました。
継承された例はかなり長いので、継承を使用しないより単純な例にスキップします。
class MyBadInitClass:
def ___init__(self, name):
self.name = name
def name_foo(self, arg):
print(self)
print(arg)
print("My name is", self.name)
class MyNewClass:
def new_foo(self, arg):
print(self)
print(arg)
my_new_object = MyNewClass()
my_new_object.new_foo("NewFoo")
my_bad_init_object = MyBadInitClass(name="Test Name")
my_bad_init_object.name_foo("name foo")
結果は次のとおりです。
<__main__.MyNewClass object at 0x033C48D0>
NewFoo
Traceback (most recent call last):
File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in <module>
my_bad_init_object = MyBadInitClass(name="Test Name")
TypeError: object() takes no parameters
PyCharmはこのタイプミスを理解できませんでした。Notepad ++もしませんでした(他のエディター/ IDEの可能性があります)。
確かに、これは「パラメータをとらない」TypeErrorであり、Pythonでのオブジェクトの初期化に関して、1つを期待する場合は「2つ取得」とそれほど変わりません。
トピックの対処:構文的に正しい場合はオーバーロード初期化子が使用されますが、そうでない場合は無視され、代わりに組み込みが使用されます。オブジェクトはこれを予期/処理せず、エラーがスローされます。
構文エラーの場合:修正は簡単です。カスタムのinitステートメントを編集するだけです。
def __init__(self, name):
self.name = name
self
。したがってdef method(arg):
、メソッドの宣言は間違っていますdef method(self, arg):
。メソッドディスパッチがmethod(arg):
2つのパラメーターを呼び出して照合しようとすると、self, arg
そのエラーが発生します。