Python TypeError: falta 1 argumento posicional requerido

Manav Narula 21 junio 2023
  1. No instanciar un objeto en Python
  2. Instanciando incorrectamente un objeto de clase en Python
  3. Solucione el error TypeError: falta 1 argumento posicional requerido: 'self' en Python
  4. Conclusión
Python TypeError: falta 1 argumento posicional requerido

Las clases son una de las características fundamentales de los lenguajes de programación orientada a objetos. Cada objeto pertenece a alguna clase en Python.

Podemos crear nuestra clase como modelo para crear objetos del mismo tipo. Usamos la palabra clave clase para definir una clase en Python.

Una característica muy importante en Python es usar el atributo self al definir clases. El atributo self representa los datos del objeto y vincula los argumentos al objeto.

Este tutorial discutirá el error TypeError: falta 1 argumento posicional requerido: 'self' en Python y cómo podemos resolverlo.

Analicemos las situaciones en las que se produce este error.

No instanciar un objeto en Python

Los argumentos posicionales se refieren a los datos que proporcionamos a una función. Para crear objetos de clase, usamos un constructor.

Si la clase requiere datos, debemos pasarlos como argumentos en la función constructora.

Este error surge cuando olvidamos instanciar el objeto de la clase o instanciamos incorrectamente la instancia de la clase.

Vea el código a continuación.

class Delft:
    def __init__(self, name):
        self.name = name

    def fun(self):
        return self.name


m = Delft.fun()
print(m)

Producción :

TypeError: fun() missing 1 required positional argument: 'self'

En el ejemplo anterior, recibimos el error porque olvidamos instanciar la instancia de la clase e intentar acceder a la función de la clase. Como resultado, el atributo self no está definido y no puede vincular los atributos al objeto.

Tenga en cuenta que se trata de un TypeError, que se genera en Python al realizar alguna operación no admitida en un tipo de datos determinado. No se admite acceder directamente al método de clase sin crear una instancia.

Instanciando incorrectamente un objeto de clase en Python

Otro escenario donde puede ocurrir este error es cuando instanciamos incorrectamente el objeto de clase. Esto puede ser un pequeño error de tipeo como ignorar los paréntesis o no proporcionar los argumentos.

Por ejemplo:

class Delft:
    def __init__(self, name):
        self.name = name

    def fun(self):
        return self.name


m = Delft
a = m.fun()
print(a)

Producción :

TypeError: fun() missing 1 required positional argument: 'self'

Analicemos ahora cómo solucionar este error en la sección a continuación.

Solucione el error TypeError: falta 1 argumento posicional requerido: 'self' en Python

Para corregir este error, podemos crear la instancia de la clase y usarla para acceder al método de la clase.

Vea el código a continuación.

class Delft:
    def __init__(self, name):
        self.name = name

    def fun(self):
        return self.name


m = Delft("Stack")
a = m.fun()
print(a)

Producción :

Stack

En el ejemplo, primero creamos una instancia de la clase. Esto luego se usa para acceder al método de clase para devolver algún valor e imprimirlo; el error esta arreglado

Otra solución implica el uso de métodos estáticos. Los métodos estáticos son funciones vinculadas a una clase en particular y no a un objeto.

Podemos usar el decorador @staticmethod para crear dichos métodos.

Por ejemplo:

class Delft:
    def __init__(self, name):
        self.name = name

    @staticmethod
    def fun(abc):
        return abc


a = Delft.fun("Stack")
print(a)

Producción :

Stack

En el ejemplo anterior, cambiamos la función fun() a una función estática. De esta manera, podríamos usarlo sin instanciar ningún objeto de clase.

Conclusión

Este tutorial discutió el error TypeError: falta 1 argumento posicional requerido: 'self' en Python y cómo podemos resolverlo.

Hablamos de situaciones en las que podría ocurrir este error y cómo corregirlo instanciando el objeto de la clase. También podemos usar métodos estáticos para evitar este error.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python TypeError

Artículo relacionado - Python Error