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)