TypeError: módulo.__init__() toma en la mayoría de los 2 argumentos (3)

He definido una clase en un archivo denominado Object.py. Cuando trato de heredar de esta clase en otro archivo, llamar al constructor lanza una excepción:

TypeError: module.__init__() takes at most 2 arguments (3 given)

Este es mi código:

import Object

class Visitor(Object):
    pass

instance = Visitor()  # this line throws the exception

¿Qué estoy haciendo mal?

  • Podría usted por favor seleccione la respuesta? Parece ser correcta y permitirá que otras preguntas cerradas como incautos de los suyos.
  • Hey @wakamdr la pregunta duplicada funcionalidad es muy útil. Hay una razón por la que mi respuesta no es correcta?
  • Una respuesta no tiene necesidad de ser aceptados por otras preguntas a engañar-cerrado como los duplicados de este.

4 Kommentare

  1. 219

    Su error está sucediendo, porque Object es un módulo, no una clase. Por lo que su herencia se descompone.

    Cambiar su declaración de importación para:

    from Object import ClassName

    y la definición de la clase a:

    class Visitor(ClassName):

    o

    cambiar la definición de la clase a:

    class Visitor(Object.ClassName):
       etc
    • Wiil es el trabajo de la misma, si uno omite ClassName completamente? Como class Visitor()?
    • ¿Por qué no probar y descubrir. Python gran cos tiene el intérprete. Ideal para la experimentación rápida
    • Genio. el peor error de la línea en el mundo. me llevó 3 horas para averiguar que estaba usando el módulo y no la clase. #$%^$%&$%&
  2. 3

    Usted también puede hacer lo siguiente en Python 3.6.1

    from Object import Object as Parent

    y la definición de la clase a:

    class Visitor(Parent):
  3. 0

    Incluso después de que @Mickey Perlstein la respuesta y sus 3 horas de trabajo de detective, todavía me tomó un par de minutos más para aplicar esto a mi propio desorden. En caso de que nadie es como yo y necesita un poco más de ayuda, aquí está lo que estaba pasando en mi situación.

    • respuestas es un módulo de
    • Respuesta es una clase base en las respuestas del módulo de
    • GeoJsonResponse es una nueva clase derivada de Respuesta

    Inicial GeoJsonResponse clase:

    from pyexample.responses import Response
    
    class GeoJsonResponse(Response):
    
        def __init__(self, geo_json_data):

    Se ve bien. No hay problemas hasta que se intenta depurar la cosa, que es cuando tienes un montón de aparentemente vaga mensajes de error como este:

    de pyexample.las respuestas de importación GeoJsonResponse
    ..\pyexample\respuestas\GeoJsonResponse.py:12: en (módulo)
    clase GeoJsonResponse(Respuesta):

    E TypeError: módulo() toma en la mayoría de los 2 argumentos (3)

    =================================== ERRORES ====================================

    ___________________ ERROR de recogida de tests/test_geojson.py ____________________

    test_geojson.py:2: en (módulo)
    de pyexample.las respuestas de importación GeoJsonResponse ..\pyexample\respuestas \GeoJsonResponse.py:12: en (módulo)

    clase GeoJsonResponse(Respuesta):
    E TypeError: módulo() toma en la mayoría de los 2 argumentos (3)

    ERROR: no se encuentra: \PyExample\pruebas\test_geojson.py::TestGeoJson::test_api_response

    C:\Python37\lib\site-packages\aenum__init__.py:163

    (no name ‘PyExample\ pruebas\test_geojson.py::TestGeoJson::test_api_response » en cualquiera de los [])

    Los errores fueron haciendo su mejor esfuerzo para que me señale en la dirección correcta, y @Mickey Perlstein, fue la respuesta de muertos, sólo me tomé un minuto para poner todo junto en mi propio contexto:

    Me la importación de las módulo:

    from pyexample.responses import Response

    cuando debería haber sido la importación de la clase:

    from pyexample.responses.Response import Response

    Espero que esto ayude a alguien. (En mi defensa, es todavía muy temprano).

    • cómo se relaciona con la pregunta?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea