很明显我遗漏了一些基本的东西。希望有人能纠正我!短暂性脑缺血发作
我有一个对象数组,其类包含另一个对象的实例。但当我为其中一个设置属性时,它们都会改变。你知道吗
class direction():
dest = -1
lock = ''
class room():
roomname = ''
desc = ''
n = direction()
s = direction()
w = direction()
e = direction()
item = ''
rooms = []
rooms.append( room() )
rooms.append( room() )
rooms.append( room() )
rooms.append( room() )
rooms.append( room() )
rooms[0].roomname = 'outside'
rooms[0].desc = ''
rooms[0].n.dest = 4
rooms[0].item = ''
rooms[1].roomname = 'hall'
rooms[1].desc = 'The hallway has doors to the east and south'
rooms[1].n.dest = 2
rooms[1].item = ''
如果我遍历rooms列表中的n.dest属性,那么所有属性都返回为2
就好像“房间”列表中每个对象中的方向对象都是一个实例,在其中一个实例中设置一个值将为所有实例设置方向。你知道吗
您的属性都是在类级别声明的,而不是在实例级别声明的,这意味着类的每个实例都将共享相同的值。我想你想要:
缺少构造函数,因此缺少实例变量
您正在定义类变量,因此所有实例之间的每个变量都是相同的
在每个类中,您都声明了一组类属性。像
rooms[0].roomname = 'outside'
这样的赋值创建了一个实例属性,该属性对room.roomname
进行阴影处理。但是,您实际上从未对rooms[0].n
进行任何此类赋值,因此对rooms[0].n.dest
之类的对象的每个赋值都是将实例属性dest
添加到room
的每个实例共享的direction
的相同的实例中。你知道吗在你试图“简化”你的代码时,你已经使它变得更复杂了。定义
__init__
来设置实例属性;类属性不经常使用。你知道吗相关问题 更多 >
编程相关推荐