显然我只是不知道如何在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
无论我对进口做什么,或者我似乎都有什么改变,这一切都让我一直都有错误。不知道该做什么 - 也许我只是在向我展示时错过了类和子类的创建,但我无法弄清楚要修复它。
答案 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")