В каждом классе вы объявили набор атрибутов class . Присвоение типа rooms[0].roomname = 'outside'
создает атрибут instance , который затеняет room.roomname
. Однако на самом деле вы никогда не делаете такого назначения для rooms[0].n
, поэтому каждое назначение для чего-то вроде rooms[0].n.dest
добавляет атрибут экземпляра dest
к тому же экземпляру direction
, который используется каждым экземпляром room
.
Пытаясь «упростить» свой код, вы сделали его более сложным. Определите __init__
для установки атрибутов instance ; Атрибуты класса используются не так часто.
class Direction:
def __init__(self, dest, lock=''):
self.dest = dest
self.lock = lock
class Room:
def __init__(self, roomname, desc, item=''):
self.roomname = roomname
self.desc = desc
self.n = direction()
self.s = direction()
self.w = direction()
self.e = direction()
self.item = item
rooms = []
r = Room('outside', '')
r.n.dest = 4
rooms.append(r)
r = Room('hall', 'The hallway has doors to the east and south')
r.n.dest = 2
rooms.append(r)