5

因此,自从我尝试将代码重构为不同的文件以来,这个 Python 问题一直给我带来问题。我有一个名为 object.py 的文件,其中相关代码是:

class Object:
#this is a generic object: the player, a monster, an item, the stairs...
#it's always represented by a character on screen.
def __init__(self, x, y, char, color):
    self.x = x
    self.y = y
    self.char = char
    self.color = color

def move(self, dx, dy):
    #move by the given amount, if the destination is not blocked
    #if not map[self.x + dx][self.y + dy].blocked:
        self.x += dx
        self.y += dy

现在,当我尝试专门编译此文件时,我收到此错误:

TypeError: unbound method __init__() must be called with Object instance as first argument (got int instance instead)

试图调用它的代码是:

player = object_info.Object.__init__(BurglaryConstants.SCREEN_WIDTH/2, BurglaryConstants.SCREEN_HEIGHT/2, '@', libtcod.white)

编译时导致此错误:

AttributeError: 'module' object has no attribute 'Object'

那么这一切到底是怎么回事,我应该如何重构呢?另外我认为拥有一个名为 Object 的类不是一个很好的编码实践,对吗?

谢谢你的帮助!

4

2 回答 2

4

更新

您正在Object一个名为object.py. 然而客户指的是object_info.Object. 这是一个错字吗?

另外我认为拥有一个名为 Object 的类不是一个很好的编码实践,对吗?

正确的。将您的课程重命名为其他名称,例如GenericObjector GenericBase。也不要使用模块名称object.py。适当地改变它。

您正在构建一个实例,Object但您这样做的方式是错误的。试试这个:

player = object_info.Object(BurglaryConstants.SCREEN_WIDTH/2, BurglaryConstants.SCREEN_HEIGHT/2, '@', libtcod.white)

Dive Into Python 的这一应该证明是有用的。

于 2010-08-24T17:02:17.900 回答
1

首先,始终使用新式类,即继承自object. (如果您正在运行只有新式类的 Python 3,则不需要这样做)

其次,在这里调用__init__很可能是错误的——如果你想实例化一个新对象,只需编写Object(x, y, char, color).

于 2010-08-24T17:03:01.083 回答