【问题标题】:Reference imported class from within imported class从导入的类中引用导入的类
【发布时间】:2017-02-08 10:17:23
【问题描述】:

对于棋盘,假设有一个 Board 类,具有 squares 属性,这是一个 Square 实例数组。文件结构是有main.pyboard.pysquare.py和一个空的__init__.py(我不得不说我不完全理解后者的目的......但显然这就是做事)。这些都在同一个目录中。 (我之前没有在 Python 中做过任何涉及多个文件的事情。)

main.py 中,我想实例化一个Board 对象。这是main.py的内容:

from board import Board
from square import Square

board = Board()

这里是square.py

class Square:
    def __init__(self):
        pass
        #this class doesn't do anything yet

这里是board.py:

class Board:
    row_count = 8
    column_count = 8

    def __init__(self):
        self.squares = self.generate_squares()

    def generate_squares(self):
        squares = {}
        for i in range(0, self.row_count * self.column_count):
            squares[i] = Square()
        return squares

但是,当我运行main.py 时,我被告知squares[i] = Square() 行有错误;即NameError: global name 'Square' is not defined

我已尝试将其更改为 squares[i] = square.Square(),但这会产生相同的错误。

如果我删除 import 语句并将类定义复制到 main.py 中,则实例化工作正常,从而将问题归结为与 import 语句本身相关。

【问题讨论】:

  • 使用堆栈跟踪找出问题所在..
  • 如果你在那里使用它,你也必须在board.py 中使用from square import Square

标签: python class namespaces python-import


【解决方案1】:

在 main.py 中,您导入了两个类,但是,Board 无法看到 Square,反之亦然。将“import Square”添加到您的 Board 类中,并将其从 main.py 中删除。

【讨论】:

  • 谢谢。有没有办法做到这一点,但情况并非如此?来自 PHP,其中只有一个 include 语句可以完成这项工作,Python 包含文件的方式似乎非常复杂......
  • 您只需要一个“import Square”,但它需要在 Board 类中。 main.py 也可以直接访问 Square。
猜你喜欢
  • 2016-12-03
  • 2019-12-11
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2020-07-23
相关资源
最近更新 更多