因此,我正在学习python,并试图构建一个包含内部类的python文件,我试图将主题填充为类内的数组。然而,它似乎指向了同一个记忆,尽管我正在使用字典来确保它不会发生。我有办法解决这个问题吗?
我正试着给我的学生分配两门课。然而,当访问主题的名称时,它会返回位于第一个索引的同一主题。
我习惯了java,在那里我可以使用new
标记创建一个类的新实例。
class Student:
class Subject:
def __init__(self):
self.name = ''
def __init__(self):
self.name = ''
self.subject = self.Subject()
self.courses = {}
def test():
courses = ['Subject A', 'Subject B']
student = Student()
student.name = 'apple'
for i, course in enumerate(courses):
student.courses[i] = student.subject
student.courses[i].name = course
print(student.courses[0].name)
print(student.courses[1].name)
test()
非常感谢你的帮助!我很难理解这一点。
类本身就是一个对象,因此当您运行时
student.courses[i] = student.Subject
您不是在创建类的实例,而是在设置";静态";班
当您在这里重写名称时,您就是在为共享类重写名称。
student.courses[i].name = course
一个解决方案是:
student.courses[i] = student.Subject()
这里有一种更惯用的python编写程序的方法,只是需要思考一下。特别是,我很少看到通过self引用内部类。XXX、 但正如你所看到的,它是有效的。
class Student:
class Subject:
def __init__(self, name=None):
self.name = name
def __str__(self):
return 'subject is "%s"' % self.name
def __init__(self, name=None):
self.name = name
self.courses = []
def addcourse(self, name):
self.courses.append(Student.Subject(name))
def test():
subjects = []
courses = ["Subject A", "Subject B"]
student = Student(name="Student A")
for course in courses:
student.addcourse(course)
print(student.courses[0])
print(student.courses[1])