Một cái gì đó khác để xem xét khi gặp loại lỗi này:
Tôi đã chạy vào thông báo lỗi này và thấy bài viết này hữu ích. Hóa ra trong trường hợp của tôi, tôi đã ghi đè lên một __init__()
nơi có sự kế thừa đối tượng.
Ví dụ được kế thừa khá dài, vì vậy tôi sẽ bỏ qua một ví dụ đơn giản hơn không sử dụng tính kế thừa:
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")
Kết quả là:
<__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 đã không bắt lỗi đánh máy này. Notepad ++ cũng vậy (các trình soạn thảo / IDE khác có thể).
Cấp, đây là TypeError "không có tham số", nó không khác nhiều so với "có hai" khi mong đợi một, về mặt khởi tạo đối tượng trong Python.
Giải quyết chủ đề: Một trình khởi tạo quá tải sẽ được sử dụng nếu đúng về mặt cú pháp, nhưng nếu không, nó sẽ bị bỏ qua và sử dụng tích hợp thay thế. Đối tượng sẽ không mong đợi / xử lý việc này và lỗi được đưa ra.
Trong trường hợp lỗi sytax: Cách khắc phục rất đơn giản, chỉ cần chỉnh sửa câu lệnh init tùy chỉnh:
def __init__(self, name):
self.name = name
self
. Vì vậy, khai báodef method(arg):
là sai cho một phương thức, nó nên đượcdef method(self, arg):
. Khi công văn phương thức cố gắng gọimethod(arg):
và khớp hai tham sốself, arg
với nó, bạn sẽ gặp lỗi đó.