Python导入问题

时间:2011-07-20 03:06:39

标签: python inheritance import

显然我只是不知道如何在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 :(得分: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)

答案 1 :(得分:0)

问题出在你的学生班上。这里,Person指的是Person.py模块。您应该通过执行以下操作来调用父对象:

super().__init__(name,age)

此外,在主要部分中,您应该初始化:

s = Student.Student("Jim", 20, "math")