180 votes

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

J'ai défini une classe dans un fichier nommé Object.py . Lorsque j'essaie d'hériter de cette classe dans un autre fichier, l'appel au constructeur déclenche une exception :

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

Voici mon code :

import Object

class Visitor(Object):
    pass

instance = Visitor()  # this line throws the exception

Qu'est-ce que je fais de mal ?

2 votes

Pourriez-vous sélectionner la réponse fournie ? Elle semble correcte et permettra de fermer d'autres questions en tant que doublons de la vôtre.

1 votes

Hey @wakamdr la fonctionnalité de question dupliquée est très utile. Y a-t-il une raison pour laquelle ma réponse n'est pas correcte ?

0 votes

Il n'est pas nécessaire qu'une réponse soit acceptée pour que d'autres questions soient fermées en tant que doublons de celle-ci.

291voto

Sheena Points 3111

Votre erreur se produit parce que Object est un module, pas une classe. Donc votre héritage est foireux.

Changez votre déclaration d'importation en :

from Object import ClassName

et la définition de votre classe à :

class Visitor(ClassName):

ou

changez la définition de votre classe en :

class Visitor(Object.ClassName):
   etc

17voto

Sunfish Points 135

Même après la réponse de @Mickey Perlstein et ses 3 heures de travail de détective, il m'a fallu encore quelques minutes pour appliquer cela à mon propre désordre. Au cas où quelqu'un d'autre serait comme moi et aurait besoin d'un peu plus d'aide, voici ce qui se passait dans ma situation.

  • les réponses sont un module
  • Response est une classe de base dans le module de réponses
  • GeoJsonResponse est une nouvelle classe dérivée de Response

Classe initiale de GeoJsonResponse :

from pyexample.responses import Response

class GeoJsonResponse(Response):

    def __init__(self, geo_json_data):

Ça a l'air bien. Aucun problème jusqu'à ce que vous essayiez de déboguer l'appareil, et c'est alors que vous obtenez un tas de messages d'erreur apparemment vagues comme celui-ci :

from pyexample.responses import GeoJsonResponse .. \pyexample\responses\GeoJsonResponse.py :12 : dans (module) classe GeoJsonResponse(Response) :

E TypeError : module() prend au plus 2 arguments (3 donnés)

\=================================== ERRORS ====================================

___________________ ERROR collecte tests/test_geojson.py ____________________

test_geojson.py:2 : in (module) from pyexample.responses import GeoJsonResponse \pyexample\responses \GeoJsonResponse.py :12 : dans (module)

classe GeoJsonResponse(Response) : E TypeError : module() prend au plus 2 arguments (3 donnés)

ERROR : non trouvé : \PyExample\tests\test_geojson.py ::TestGeoJson::test_api_response

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

(pas de nom 'PyExample' tests \test_geojson.py ::TestGeoJson::test_api_response' dans n'importe lequel de [])

Les erreurs ont fait de leur mieux pour m'orienter dans la bonne direction, et la réponse de @Mickey Perlstein était tout à fait pertinente, il m'a juste fallu une minute pour tout comprendre dans mon propre contexte :

J'importais le module :

from pyexample.responses import Response

alors que j'aurais dû importer le classe :

from pyexample.responses.Response import Response

J'espère que cela aidera quelqu'un. (Pour ma défense, il est encore un peu tôt).

7voto

Divesh singh Points 21
from Object import Object

ou

From Class_Name import Class_name

Si l'objet est un .py fichier.

4voto

Anthony Rutledge Points 280

Vous pouvez également effectuer les opérations suivantes dans Python 3.6.1

from Object import Object as Parent

et la définition de votre classe à :

class Visitor(Parent):

0voto

Gerardsson Points 304

Dans le cas où j'ai eu le problème, je faisais référence à un module lorsque j'ai essayé d'étendre la classe.

import logging
class UserdefinedLogging(logging):

Si vous regardez les informations de la documentation, vous verrez que "logging" est affiché comme module.

Dans ce cas précis, j'ai dû simplement hériter du module de journalisation pour créer une classe supplémentaire pour la journalisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X