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 = []
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值