【Python】一个在类的属性初始化时候要注意的问题

之前在写一个小的作业的时候出的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 = []

就可以解决问题了。

猜你喜欢

转载自blog.csdn.net/qq_41279172/article/details/99618638