欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-21 21:04:32
...

作为一种面向对象的编程语言,“类”在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 类初始化