python循环的内部类引用相同的内存并分配最后一个引用的变量



因此,我正在学习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])

最新更新