Bu tür bir hatayla karşılaşıldığında dikkate alınması gereken başka bir şey:
Bu hata iletisiyle karşılaşıyordum ve bu gönderiyi yararlı buldum. Benim durumumda __init__()
, nesne mirasının olduğu bir yeri geçersiz kıldığım ortaya çıkıyor.
Devralınan örnek oldukça uzun, bu yüzden miras kullanmayan daha basit bir örneğe geçeceğim:
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")
Sonuç:
<__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 bu yazım hatasını yakalamadı. Notepad ++ (diğer editörler / IDE'ler de olabilir).
Bu bir "parametre almaz" TypeError, Python'da nesne başlatma açısından birini beklerken "iki tane var" dan çok farklı değildir.
Konuyu ele alma: Sözdizimsel olarak doğru ise aşırı yükleme başlatıcısı kullanılacaktır, ancak değilse yok sayılır ve bunun yerine yerleşik kullanılır. Nesne bunu beklemez / işlemez ve hata atılır.
Sytax hatası durumunda: Düzeltme basittir, sadece özel init deyimini düzenleyin:
def __init__(self, name):
self.name = name
self
. Yanidef method(arg):
bir yöntem için bildirmek yanlış, öyle olmalıdef method(self, arg):
. Yöntem dağıtımımethod(arg):
iki parametreyi çağırmaya ve eşleştirmeye çalıştığındaself, arg
, bu hatayı alırsınız.