Hal lain yang perlu dipertimbangkan ketika jenis kesalahan ini ditemukan:
Saya menemukan pesan kesalahan ini dan menemukan posting ini bermanfaat. Ternyata dalam kasus saya, saya telah menimpa di __init__()
mana ada objek warisan.
Contoh yang diwarisi agak panjang, jadi saya akan beralih ke contoh yang lebih sederhana yang tidak menggunakan warisan:
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")
Hasilnya adalah:
<__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 tidak menangkap kesalahan ketik ini. Notepad ++ (kekuatan editor / IDE lain) juga tidak.
Memang, ini adalah TypeError "tidak mengambil parameter", itu tidak jauh berbeda dari "punya dua" ketika mengharapkan satu, dalam hal inisialisasi objek dalam Python.
Mengatasi topik: Inisialisasi overloading akan digunakan jika secara sintaksis benar, tetapi jika tidak akan diabaikan dan built-in digunakan sebagai gantinya. Objek tidak akan mengharapkan / menangani ini dan kesalahan dilemparkan.
Dalam kasus kesalahan sytax: Perbaikannya sederhana, cukup edit pernyataan init khusus:
def __init__(self, name):
self.name = name
self
. Jadi, menyatakandef method(arg):
metode itu salah, seharusnya begitudef method(self, arg):
. Ketika metode pengiriman mencoba untuk memanggilmethod(arg):
dan mencocokkan dua parameterself, arg
terhadapnya, Anda mendapatkan kesalahan itu.