python编写一个班级类_python-为类变量分配一个值,以对该对象的所...

在Python中,创建Fleet类的多个实例时,发现类变量shipNamesandNumber在所有实例间共享,导致修改一个实例会影响其他实例。通过创建测试类Foo验证,相同操作在Foo类中不会出现问题。问题可能源于Fleet类中shipNamesandNumber的处理方式。
摘要由CSDN通过智能技术生成

我有一堂课带字典.

我创建了该类的n个实例.

当我=该字典中某个键上的值时,它将反映在我从该对象实例化的每个对象中.

如何使该字典对于该类的每个实例都是唯一的?

这是我创建对象的方法:

for num in range(0, numOfPlayers):

listOfPlayerFleets.append(fleet.Fleet())

这是调用addShip方法的方法.我在for循环中拥有此功能,并已验证currentPlayer int每次都在递增.

listOfPlayerFleets[currentPlayer].addShip(typeOfShip, num)

下面是示例中我的Fleet对象中的代码.

class Fleet:

""" Stores Fleet Numbers, Represents a fleet """

shipNamesandNumber = {}

def addShip(self, type, numToAdd):

self.shipNamesandNumber[ships.shipTypesDict[type]['type']] += numToAdd

在pydev中,当我逐步执行此函数调用时,每个具有shipNamesandNumbers的对象都会增加numToAdd.

即使那些Fleet对象位于内存中的不同位置,也会发生这种情况.

我必须从另一个班级传入字典吗?我编写了一个测试类来验证这一点:

class Foo:

"""Testing class with a dictionary"""

myDictionary = {}

def __init__(self):

self.myDictionary = {'first':0, 'second':0}

def addItem(self, key, numToAdd):

self.myDictionary[key] += numToAdd

numOfFoos = 2

listOfFoos = []

for num in range(0, numOfFoos):

listOfFoos.append(Foo())

listOfFoos[0].addItem('first', 1)

listOfFoos[0].addItem('first', 2)

listOfFoos[1].addItem('first', 2)

print " This is the value of foo1 it should be 3"

print listOfFoos[0].myDictionary

print "This is the value of foo2 ot should be 2"

print listOfFoos[1].myDictionary

Foo类与我的Fleet对象没有相同的问题,当修改一个词典时,我的Fleet对象的所有字典都被修改了.

所以这让我更加困惑.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值