Python导入问题
显然,我不知道如何在Python程序中正确导入东西。我只是从语言开始,它与我习惯的Java有很大的不同 不管怎么说,主要的问题是我导入包/模块/类的方式有问题,我似乎不知道是什么 现在,我的文件结构如下所示: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
-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中,地球会被污染。上述版本在新打开的解释器中为我运行。