首页 > 解决方案 > 如何访问对象填充字典中的值?

问题描述

这是代码的有问题的部分:

import numpy as np

class Player():
  def __init__(self, health, maxHealth, baseDmg, dmg, name, weapons, items, isAlive, previousRoom, room):
    self.health = health
    self.maxHealth = maxHealth
    self.baseDmg = baseDmg
    self.dmg = dmg
    self.name = name
    self.weapons = weapons
    self.items = items
    self.isAlive = isAlive
    self.previousRoom = previousRoom
    self.coords = (0, 0)

  def Move(self, direction):
    if direction not in self.room.exits:
      print("Cannot Move In That Direction!")
      return
    newRoomName = self.room.exits[direction]
    self.previousRoom = self.room.name
    print("Moving to", newRoomName)
    world[newRoomName] = newRoomName
    self.room = world[newRoomName]

class Room():
  def __init__(self, name, description, exits, hasWeapon, weapon, hasItem, item, hasEnemy, enemy, isFirstVisit, coords):
    self.name = name
    self.description = description
    self.exits = exits
    self.hasWeapon = hasWeapon
    self.weapon = weapon
    self.hasItem = hasItem
    self.item = item
    self.hasEnemy = hasEnemy
    self.enemy = enemy
    self.isFirstVisit = isFirstVisit
    self.coords = coords

world = {}
rooms = np.empty((11,11), object)

rooms[5][5] = Room(
  "room1",
  "",
  {"E": "room2"},
  False,
  None,
  False,
  None,
  False,
  None,
  True,
  (5, 5)
)
rooms[5][6] = Room(
  "room2",
  "",
  {"W": "room1"},
  False,
  None,
  False,
  None,
  False,
  None,
  True,
  (5, 5)
)

counter = 1

world["room1"] = rooms[3][3]
world["room2"] = rooms[3][4]

player = Player(10, 10, 5, 5, "Jedidiah", [], [], True, world["room1"].coords, world["room1"].coords)

我想要做的是使用 2d 数组和字典(根据项目要求)在 python 中创建一个运动系统,但它一直给我一个错误,说“str object has no attribute 'coords'”:

Traceback (most recent call last):
  File "main.py", line 75, in <module>
    player = Player(10, 10, 5, 5, "Ethan", [], [], True, world["room1"].coords, world["room1"].coords)
AttributeError: 'NoneType' object has no attribute 'coords'

我不知道为什么会这样,但我确信这是一个简单的解决方案。我是编程新手,所以请让答案尽可能简单。感谢所有帮助。

标签: pythonpython-3.xnumpyobject

解决方案


np.emptyNonewith object dtype 创建一个包含元素的数组:

In [184]: rooms = np.empty((2,2), object)
In [185]: rooms
Out[185]: 
array([[None, None],
       [None, None]], dtype=object)

我看到你有一组rooms[5,5] 和 [5,6] 的元素到Room对象,并分配了几个其他元素到worlddict (3,3) (3,4)。这些元素还在None

看起来所有那些“未设置”的坐标都给你带来了问题。要么对索引更加小心,要么添加一些保护措施来正确处理None元素。


推荐阅读