Python3-TypeError: модуль. init () принимает не более 2 аргументов (3 приведенных)

пожалуйста, не отмечайте как дубликат, другие подобные вопросы не решили мою проблему.

это моя установка

/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"

работает:

$ python3 main.py

единственное сообщение об ошибке, которое я получаю:

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)

даже если я попытаюсь для консоли python3, я получил то же сообщение об ошибке:

$python3
from actions import ViewAction

Я новичок в Python, но не новичок в программировании. Я предполагаю, что мои сообщения об ошибках имеют отношение к операторам импорта, но на основе сообщения я не могу понять, что это значит.

спасибо

3 ответов


ваш импорт неверен, поэтому вы пытаетесь наследовать сами модули, а не классы (с тем же именем), определенные внутри них.

from actions import ListitAction

на ViewAction.py должно быть:

from actions.ListitAction import ListitAction

и аналогично, все другие виды использования должны переключаться на явный импорт from actions.XXX import XXX (благодаря повторяющимся именам), например from actions import ListitAction, ViewAction должны стать два импорта:

from actions.ListitAction import ListitAction
from actions.ViewAction import ViewAction

потому что импортируемые классы поступают из разных модулей под actions пакет.


вы передаете self когда вам не нужно, это все.
Edit: см. mseifert's комментарий ответ, так как я не хочу воровать контент.


создание классов и экземпляров переменных

class Student:
    # Creating a Class Variables
    perc_Raise = 1.05

    # Creating a constructor or a special method to initialize values
    def __init__(self,firstName,lastName,marks):
        self.firstName = firstName
        self.lastName = lastName
        self.email = firstName + "." + lastName +"@northalley.com"
        self.marks = marks

    def fullName(self):
        return '{} {}'.format(self.firstName,self.lastName)

    def apply_raise(self):
        self.marks = int(self.marks * self.perc_Raise)

создание переменной с двумя экземплярами для класса Student

std_1 = Student('Mahesh','Gatta',62)
std_2 = Student('Saran','D',63)

print(std_1.fullName())
print(std_1.marks)

std_1.apply_raise()

print(std_1.marks)
print(std_1.email) 
print(std_1.__dict__)
print(std_2.fullName())
print(std_2.marks)

std_2.apply_raise()

print(std_2.marks)
print(std_2.email)
print(std_2.__dict__)

print(Student.__dict__)

наследование

class Dumb(Student):
    perc_Raise = 1.10

    def __init__(self,firstName,lastName,marks,prog_lang):
        super().__init__(firstName,lastName,marks)
        self.prog_lang = prog_lang

std_1 = Dumb('Suresh','B',51,'Python')

print(std_1.fullName())
print(std_1.marks)

std_1.apply_raise()

print(std_1.marks)
print(std_1.prog_lang)