Python:类实例;“没有属性”;传递给另一个模块中的函数时
我在将类实例传递给另一个模块中的函数时遇到问题 代码如下:Python:类实例;“没有属性”;传递给另一个模块中的函数时,python,class,inheritance,import,module,Python,Class,Inheritance,Import,Module,我在将类实例传递给另一个模块中的函数时遇到问题 代码如下: (在模块“基座”中): (在“物理”模块中): 当我将“基本”模块加载到交互式解释器中(或在“基本”模块中创建CellsArray实例)时,一切似乎都很好: (交互式口译员示例): 但是,如果我添加打印类型(单元格);将cells.getCollidingCells打印到collisionsTest函数(在单元格中的c的之前…),它返回: <class 'base.CellsArray'> <bound method
(在模块“基座”中): (在“物理”模块中): 当我将“基本”模块加载到交互式解释器中(或在“基本”模块中创建CellsArray实例)时,一切似乎都很好:
(交互式口译员示例): 但是,如果我添加
打印类型(单元格);将cells.getCollidingCells
打印到collisionsTest函数(在单元格中的c的之前…
),它返回:
<class 'base.CellsArray'>
<bound method CellsArray.getCollidingCells of blist([<base.Cell instance at 0x7f2e4a7d1638>, ...])>
我觉得导入“物理”模块有些问题,但我几乎尝试了导入该模块的所有可用方法,但仍然会出现错误。
模块“physics”使用模块“base”中的一些变量和类,所以我不能简单地删除“import base
”
有没有办法解决这个问题,或者我必须把所有的函数和常数从“物理”移回“基”?
单元格
是一个单元格数组
的列表,但你希望它是一个单独的单元格数组
也许collisionsTest
应该是:
def collisionsTest(cells):
for c in cells:
c.getCollidingCells(c.getCellByCoords(c.x, c.y))
请提供一个简短、完整的程序来演示错误。有关更多信息,请参见或,行
cells.getCollidingCells(cells.getCellByCoords(c.x,c.y))
,cells是列表,而不是CellsArray。如果需要更多调试帮助,您必须向我们显示调用collisionTest
的位置。CellsArray
本身就是一个列表。它扩展了blist
类,该类扩展了基本Pythonlist
类blist
存储在外部的第三方Python库中。否,collisionsTest
调用给定CellsRay(cells
)的GetCollisdingCells
方法。CellsArray本身按坐标查找单元格并返回冲突单元格。从您的错误消息中,我可以向您保证,单元格
不是CellsArray
。它是一个列表
。请提供一个简短完整的程序来演示错误。我已经提到,CellsArray
确实是一个列表:它扩展了blist
类。尽管如此,cells
不是CellsArray
,它是一个列表。您可以通过将打印类型(单元格)
添加到冲突测试中来说服自己。
>>> a = CellsArray([])
>>> a.append(Cell())
>>> a.getCollidingCells(a[0])
#returns None
>>> a.getCollidingCells
<bound method CellsArray.getCollidingCells of blist([<__main__.Cell instance at 0x7f847e8fa170>])>
cells.getCollidingCells(cells.getCellByCoords(c.x, c.y))
AttributeError: 'list' object has no attribute 'getCollidingCells'
<class 'base.CellsArray'>
<bound method CellsArray.getCollidingCells of blist([<base.Cell instance at 0x7f2e4a7d1638>, ...])>
def collisionsTest(cells):
for c in cells:
c.getCollidingCells(c.getCellByCoords(c.x, c.y))