Python导入问题

Python导入问题,python,inheritance,import,Python,Inheritance,Import,显然,我不知道如何在Python程序中正确导入东西。我只是从语言开始,它与我习惯的Java有很大的不同 不管怎么说,主要的问题是我导入包/模块/类的方式有问题,我似乎不知道是什么 现在,我的文件结构如下所示: -Main Directory main.py -Person (Folder) __init__.py Person.py Student.py 现在我的main.py文件看起来像 from Person import Pers

显然,我不知道如何在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”对象不可调用

我曾尝试将其更改为
s=Student.Student(“Jim”,20,“Math”)
,但当这种情况发生时,我最终得到的错误是
TypeError:module.\uuuu init\uuuuuuuuuuuuuuuuuu()最多接受2个参数(给定3个)

作为参考

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

无论我对导入做了什么,或者任何我似乎可以改变的事情,它都会不断地给我错误。现在不知道该怎么办-也许我只是错过了创建类和子类的过程,但我想不出任何方法来解决它。

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

super().__init__(name,age)
此外,在主要部分中,您应该初始化:

s = Student.Student("Jim", 20, "math")
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)

假设在主文件中将其更改为那样,我仍然会得到相同的
TypeError:module.\uuu init\uuuu()最多接受2个参数(给定3个)
error:/您应该使用super(),而不是这个。我认为super()的工作方式与此类似,只有Python 3。在Python 2中。*这是一个错误:
super()至少接受一个参数(给定0)
,但给定的示例在Python 3中。请参阅打印语法。如果在模块中使用小写字母,在类名中使用大写字母,您可能会更容易理解这一点。检查命名约定:另外;Python不是Java。没有任何理由把每个类放在自己的模块中
person.person
person.Student
中定义的
person/\uuuu init\uuuuuuuuuuuupy
person.py
都非常合理。类似:按照建议更改了所有内容,但仍然存在相同的类型错误。也许我只是错误地创建了子类?好吧,重新编辑以更正,PythonWin实际上并没有重新加载更改的模块<代码>类人物应从对象继承
class Student
应该从Person继承,并使用
super(Student,self)调用它的构造函数。请注意,在Student.py中,您正在导入一个类,而在main.py中,您正在导入一个模块。最后,将其更改为
类Student(Person.Peron):
或将导入从Person更改为
。Person import Person
PyDev仍然告诉我有问题,但它是有效的。你可能想关闭和重新打开PyDev并重新检查,我知道在PythonWin中,地球会被污染。上述版本在新打开的解释器中为我运行。