之前在写一个小的作业的时候出的bug,把它记录下来:
背景是这样的:
定义一个Student类,内有三个属性,学号(number),姓名(name),课程(courses)。其中课程的初始值是一个空的列表。
最开始的代码是这样的:
def __init__(self, s_number, name, course=[]):
self.number = s_number
self.name = name
self.__courses = course
作业里面使用了很多个Student类的实例对象,写完发现在输出courses的时候,所有的对象的courses属性的内容相同。
原因:
当我们调用Student类的初始化方法时,如果有传递参数course,则使用传递的参数,如果没有传递参数course,就使用默认参数,但在使用默认参数的时候,所有的student实例对象使用的是同一个,也就是保存的上一个默认参数值,因此会出现该情况。
解决方法:
可以在创建对象时,__init__在初始化时给course赋值为新的空列表即可。
修改如下:
def __init__(self, s_number, name):
self.number = s_number
self.name = name
self.__courses = []
就可以解决问题了。