Python3 - TypeError: module.__init__() prend plus de 2 arguments (3)
S'il vous plaît ne pas marquer comme en double, d'autres questions similaires ne permet pas de résoudre mon problème.
C'est ma configuration
/main.py
/actions/ListitAction.py
/actions/ViewAction.py
Main.py:
from actions import ListitAction, ViewAction
ListitAction.py:
class ListitAction(object):
def __init__(self):
#some init behavior
def build_uri():
return "test.uri"
ViewAction.py
from actions import ListitAction
class ViewAction(ListitAction):
def __init__(self, view_id):
ListitAction.__init__(self)
self.view_id = view_id
def build_uri():
return "test"
En cours d'exécution:
$ python3 main.py
Le seul message d'erreur que je reçois est:
Traceback (most recent call last):
File "/home/jlevac/workspace/project/listit.py", line 11, in <module>
from actions import ListitAction, ViewAction, CommentsAction
File "/home/jlevac/workspace/project/actions/ViewAction.py", line 3, in <module>
class ViewAction(ListitAction):
TypeError: module.__init__() takes at most 2 arguments (3 given)
Même si j'essaie pour la python3 de la console, j'ai reçu le même message d'erreur:
$python3
from actions import ViewAction
Je suis nouveau sur Python, mais pas de nouvelles pour la programmation. Je suppose que mon messages d'erreur ont à voir avec les déclarations d'importation, mais en se fondant sur le message que je ne peux pas vraiment comprendre ce que cela signifie.
Grâce
Avez-vous définir votre
Double Possible de TypeError: module.__init__() prend plus de 2 arguments (3)
Alors que le titre de la "double" la question est presque identique à celui-ci, les raisons de l'erreur est levée dans les deux questions sont différentes (c'est à dire que les réponses que l'on ne m'aide pas, alors que l'on a accepté la réponse ici)
__init__.py
fichiers ou avez-vous d'inclure votre répertoires dans le python path? L'exemple de travail si vous mettez tout dans le fichier principal?Double Possible de TypeError: module.__init__() prend plus de 2 arguments (3)
Alors que le titre de la "double" la question est presque identique à celui-ci, les raisons de l'erreur est levée dans les deux questions sont différentes (c'est à dire que les réponses que l'on ne m'aide pas, alors que l'on a accepté la réponse ici)
OriginalL'auteur levacjeep | 2016-02-12
Vous devez vous connecter pour publier un commentaire.
Vos importations sont mauvais, de sorte que vous êtes en train d'hériter de l'modules eux-mêmes, pas les classes (du même nom) définie à l'intérieur d'eux.
dans
ViewAction.py
devrait être:et de la même façon, toutes les autres utilisations devrait passer à l'explicite les importations de
from actions.XXX import XXX
(grâce à la répétition des noms), par exemplefrom actions import ListitAction, ViewAction
doit devenir deux des importations:parce que les classes importées proviennent de différents modules en vertu de la
actions
paquet.__init__.py
est le programme d'installation. Si il les importations tout en le mondialaction
de l'espace, il doit travailler comme l'OP l'a fait. Si pas votre réponse est correcte.C'est une des raisons pour suivre la convention de nommage que seuls les noms de classe sont en CamelCase, et les noms de module doivent être en minuscules; il serait plus facile de voir que vous n'êtes pas importer le nom de la classe où vous pensez que vous êtes.
L'erreur que l'OP est arriver il est clair qu'ils ne font rien de malin dans
__init__.py
pour obtenir ce comportement que le message d'erreur est exactement ce que vous vous attendez à voir lorsque vous essayez de faire une classe hérite d'un module.Je suis issu d'une Java d'arrière-plan. Si un fichier n'est pas spécifiquement une classe, mais un module. Gotcha. Je n'ai pas de init.py de l'installation, je ne savais pas à ce sujet.
Je suis surpris qu'il fonctionne à tous, alors; vous avez besoin d'au moins un vide
__init__.py
pour les paquets de travailler à tous. Peu importe, oui, Java est étrange qu'elle ne permet qu'une seule (non imbriquée) de la classe définie par le fichier source. Python et la plupart des autres langages à objets pouvez définir le nombre de classes par module. Compte tenu de votre cas d'utilisation (en supposant qu'il n'est pas assez complexe pour justifier leur séparation en séparer les fichiers source), vous devriez probablement juste de faire unactions.py
fichier et définir les deux classes, ce qui permet d'économiser les tracas de ces importations.OriginalL'auteur ShadowRanger
Vous êtes de passage à
self
quand vous n'en avez pas besoin, c'est tout.Edit: voir MSeifert
commentaireréponse étant donné que je ne veux pas voler le contenu.OriginalL'auteur Idos
De la création de classes et de l'instance de variables
La création d'un deux variable d'instance pour un Élève de classe
Héritage
OriginalL'auteur Naga Mahesh Gatta