python的类里的属性是否可以为列表_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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值