python - 如何访问对象填充字典中的值?
问题描述
这是代码的有问题的部分:
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'
我不知道为什么会这样,但我确信这是一个简单的解决方案。我是编程新手,所以请让答案尽可能简单。感谢所有帮助。
解决方案
np.empty
None
with 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
对象,并分配了几个其他元素到world
dict (3,3) (3,4)。这些元素还在None
。
看起来所有那些“未设置”的坐标都给你带来了问题。要么对索引更加小心,要么添加一些保护措施来正确处理None
元素。
推荐阅读
- ember.js - 在 Octane 中向 LinkTo 添加额外操作
- c - stat(2) 线程安全吗?
- html - facebook的分享链接不显示我的网址
- android - IllegalArgumentException 访问画廊视频 URI
- c# - Akavache 和 collectionChanged 事件
- ios - 将角度归一化到 0 到 360 度的范围?
- asp.net - 在构建期间获取“警告 MSB3277:发现不同版本之间的冲突”
- reactjs - 如何从传入的参数创建对象?
- elasticsearch - 嵌套聚合未生成正确的桶 elasticsearch v.7.10.2
- python - NameError BeautifulSoup HTML 解析