AttributeError:“模块”对象没有属性错误

时间:2018-11-22 09:56:57

标签: python

所以我一直在从事这款游戏。我有2个文件,Rooms.pyMonsters.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

那是怎么回事?为什么该功能不起作用?

2 个答案:

答案 0 :(得分:1)

您似乎已经进行了循环导入。 Rooms.pyMonsters.py导入,但是Monsters.py也从Rooms.py导入。

最好避免这样的循环进口。在显示的代码中,Monsters.py不使用Rooms.py中的任何内容,因此您应该能够通过删除import Rooms导入来解决此问题。

请注意,Python style guide建议您为模块名称使用小写字母,例如rooms.pymonsters.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看来,您不接受除其自身类之外的其他参数。