所以我一直在从事这款游戏。我有2个文件,Rooms.py
和Monsters.py
。运行Rooms.py
时出现错误AttributeError: 'module' object has no attribute 'Monster'
。它来自Monsters.Monster.create_monsters(self)
函数中的create_loot_monsters
行。发生了什么事?
Rooms.py
位:
def create_15by15_rooms():
roomlist = []
for i in range(-7 ,8):
e = -7
i + 1
for e in range(-7 ,8):
room = Room(i - 1, e, [i - 1, e], [], [])
e + 1
roomlist.append(room)
Room.create_loot_monsters(room)
return roomlist
def create_loot_monsters(self):
factor = random.randint(0, 100)
if factor <= 20:
pass
elif factor > 20 and factor <= 50:
pass #loot room (function to generate loot)
else:
Monsters.Monster.create_monsters(self)
return self
Monsters.py
位:
def create_monsters(self):
num = random.randint(0,200)
if num <= 20:
self.monsters = Monster.Slime
elif num > 20 and num <= 50:
self.monsters = Monster.Zombie
elif num > 50 and num <= 80:
self.monsters = Monster.Skeleton
elif num > 80 and num <= 120:
self.monsters = Monster.Infected
else:
self.monsters = Monster.Spirit
return self.monsters
编辑:从两者导入: Rooms.py
import random
import Monsters
Monsters.py
import random
import Rooms
那是怎么回事?为什么该功能不起作用?
答案 0 :(得分:1)
您似乎已经进行了循环导入。 Rooms.py
从Monsters.py
导入,但是Monsters.py
也从Rooms.py
导入。
最好避免这样的循环进口。在显示的代码中,Monsters.py
不使用Rooms.py
中的任何内容,因此您应该能够通过删除import Rooms
导入来解决此问题。
请注意,Python style guide建议您为模块名称使用小写字母,例如rooms.py
和monsters.py
。这样可以更轻松地在代码中查看模块rooms
和类Room
之间的区别。
答案 1 :(得分:0)
解决方案:
更改
Monsters.Monster.create_monsters(self)
至Monsters.Monster.create_monsters()
它应该可以工作
清单:
1确保Monsters.Monster.create_monsters()函数接受来自room.py的类的实例
原因:
Monsters.Monster.create_monsters(self)
在这行代码中,您似乎很想调用类函数create_monsters。传入的参数是room.py中的整个类(无论该类是什么) ,虽然从代码Monster看来,您不接受除其自身类之外的其他参数。