python object的实例是什么_我究竟做错了什么? Python对象实例化保留以前实例化的数据?...

有人能指出我做错了什么或我的理解错了吗?

对我来说,下面的实例化两个对象的代码似乎应该为每个实例化提供单独的数据.

class Node:

def __init__(self, data = []):

self.data = data

def main():

a = Node()

a.data.append('a-data') #only append data to the a instance

b = Node() #shouldn't this be empty?

#a data is as expected

print('number of items in a:', len(a.data))

for item in a.data:

print(item)

#b data includes the data from a

print('number of items in b:', len(b.data))

for item in b.data:

print(item)

if __name__ == '__main__':

main()

但是,第二个对象是使用第一个数据创建的:

>>>

number of items in a: 1

a-data

number of items in b: 1

a-data

解决方法:

您不能将可变对象用作默认值.所有对象将共享相同的可变对象.

做这个.

class Node:

def __init__(self, data = None):

self.data = data if data is not None else []

创建类定义时,它会创建[]列表对象.每次创建类的实例时,它都使用相同的列表对象作为默认值.

标签:python,instantiation

来源: https://codeday.me/bug/20191008/1870949.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值