Python 导入问题

1 投票
2 回答
10180 浏览
提问于 2025-04-16 21:53

看起来我在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)

撰写回答