因为我尝试将代码重构为不同的文件,所以这个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的类不是一个很好的编码实践,对吗?
感谢您的帮助!
答案 0 :(得分:4)
<强>更新强>
您正在名为Object
的文件中定义object.py
。然而,客户指的是object_info.Object
。这是一个错字吗?
另外我假设有一个名为Object的类不是一个很好的编码实践,对吗?
正确。将您的课程重命名为其他内容,例如GenericObject
或GenericBase
。也不要使用模块名称object.py
。适当改变它。
同时强>
您正在构建Object
的实例,但您执行此操作的方式是错误的。试试这个:
player = object_info.Object(BurglaryConstants.SCREEN_WIDTH/2, BurglaryConstants.SCREEN_HEIGHT/2, '@', libtcod.white)
来自Dive Into Python的这个chapter应该证明是有用的。
答案 1 :(得分:1)
首先,始终使用新式类,即从object
继承。 (如果您运行的是Python 3,它只有新风格的类型,则不需要这样做)
其次,在这里调用__init__
很可能是错误的 - 如果你想实例化一个新的对象,只需写Object(x, y, char, color)
。