Outra coisa a considerar quando esse tipo de erro é encontrado:
Eu estava encontrando esta mensagem de erro e achei esta postagem útil. Acontece que, no meu caso, eu havia substituído um local __init__()
onde havia herança de objeto.
O exemplo herdado é bastante longo, então vou pular para um exemplo mais simples que não usa heranç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")
O resultado é:
<__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 não pegou esse erro de digitação. Nem o Notepad ++ (outros editores / IDEs).
Concedido, este é um TypeError "sem parâmetros", não é muito diferente de "obteve dois" ao esperar um, em termos de inicialização de objeto em Python.
Abordando o tópico: Um inicializador de sobrecarga será usado se sintaticamente correto, mas, caso contrário, será ignorado e o incorporado será usado. O objeto não espera / lida com isso e o erro é gerado.
No caso do erro de sintaxe: A correção é simples, basta editar a instrução init customizada:
def __init__(self, name):
self.name = name
self
. Portanto, declarardef method(arg):
está errado para um método, deveria estardef method(self, arg):
. Quando o despacho do método tenta chamarmethod(arg):
e combinar dois parâmetrosself, arg
, você recebe esse erro.