Python 导入问题
看起来我在Python程序中导入东西的方式有点问题。我刚开始学习这个语言,跟我熟悉的Java差别很大。
总之,主要的问题是我在导入包、模块和类的时候出错了,但我就是搞不清楚到底哪里出了问题。
现在我的文件结构是这样的:
-Main Directory
main.py
-Person (Folder)
__init__.py
Person.py
Student.py
我的main.py文件现在看起来是这样的……
from Person import Person
from Person import Student
if __name__ == '__main__':
p = Person.Person("Jim", 20)
print(p)
s = Student("Jim", 20, "math")
print(s)
但是我一直收到一个错误提示:TypeError: 'module' object is not callable
我试着把代码改成s = Student.Student("Jim", 20, "Math")
,但这样又出现了另一个错误:TypeError: module.__init__() takes at most 2 arguments (3 given)
为了参考,
Person.py文件是:
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "My name is {0} and I am {1}".format(self.name, self.age)
Student.py文件是:
from Person import Person
class Student(Person.Person):
def __init__(self, name, age, sub):
Person.__init__(self,name,age)
self.sub = sub
不管我怎么改导入的方式或者其他的东西,错误总是不断。我现在真的不知道该怎么办——也许我在学习的时候错过了创建类和子类的部分,但我就是找不到解决办法。
2 个回答
0
问题出在你的学生类上。在这里,Person指的是Person.py这个模块。你应该通过以下方式来调用父类对象:
super().__init__(name,age)
另外,在主要部分,你应该进行初始化:
s = Student.Student("Jim", 20, "math")
2
main.py:
from Person import Person
from Person import Student
if __name__ == '__main__':
p = Person.Person("Jim", 20)
print(p)
s = Student.Student("Jim", 20, "math")
print(s)
student.py
from Person import Person
class Student(Person):
def __init__(self, name, age, sub):
super(Student, self).__init__(name,age)
self.sub = sub
person.py
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "My name is {0} and I am {1}".format(self.name, self.age)