python中使用list作为类属性进行初始化时的注意事项

作为一种面向对象的编程语言,“类”在python中的应用非常普遍。有时候,我们需要将list作为某个类的属性。进一步的,在有些场景下,我们希望能够对某个list属性进行初始化。如果需要进行这步操作,那一定要注意了。
譬如,如果有一个类的Article,其定义为:

class Article:
    def __init__(self,subject='',paragraph_list=[]):
        self.subject = subject
        self.paragraph_list = paragraph_list

当需要使用初始化类时:

articleinfo1 = Article()
articleinfo2 = Article()

若有操作:

articleinfo1.paragraph_list.append('paragraph1.1')
articleinfo1.paragraph_list.append('paragraph1.2')

articleinfo2.paragraph_list.append('paragraph2.1')
articleinfo2.paragraph_list.append('paragraph2.2')

打印:

    for paragraph in articleinfo2.paragraph_list:
        print(paragraph)

会发现显示:

paragraph1.1
paragraph1.2
paragraph2.1
paragraph2.2

这肯定不是我们想要的结果。
打印两个paragraph_list的id:

    print(id(articleinfo1.paragraph_list))
    print(id(articleinfo2.paragraph_list))

发现相同。原因应该是这两个Article实例引用相同的paragraph_list地址,因此,解决办法有两个:
一是在初始化时,指定paragraph_list的初始化值:

    articleinfo1 = Article('subject1',[])
    articleinfo2 = Article('subject2',[])

二是将Article的定义修改为:

class Article:
    def __init__(self,subject=''):
        self.subject = subject
        self.paragraph_list = []

你可能感兴趣的:(python)