Algo más a considerar cuando se encuentra este tipo de error:
Me encontré con este mensaje de error y encontré útil esta publicación. Resulta que en mi caso había anulado un lugar __init__()
donde había herencia de objetos.
El ejemplo heredado es bastante largo, por lo que pasaré a un ejemplo más simple que no usa herencia:
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")
El resultado es:
<__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 no captó este error tipográfico. Tampoco Notepad ++ (otros editores / IDE podrían).
Por supuesto, este es un TypeError "no toma parámetros", no es muy diferente de "tiene dos" cuando se espera uno, en términos de inicialización de objetos en Python.
Abordar el tema: se usará un inicializador de sobrecarga si es sintácticamente correcto, pero si no se ignorará y se utilizará el incorporado. El objeto no esperará / manejará esto y se arrojará el error.
En el caso del error de sintaxis: la solución es simple, solo edite la instrucción init personalizada:
def __init__(self, name):
self.name = name
self
. Entonces declarardef method(arg):
es incorrecto para un método, debería serlodef method(self, arg):
. Cuando el envío del método intenta llamarmethod(arg):
y hacer coincidir dos parámetrosself, arg
con él, obtienes ese error.