python - 从附加模块到主模块的导入类问题
问题描述
我无法理解,为什么我的 BlackChecker 类无法创建实例。我有 3 个模块。我在主模块中导入了 2 个模块。当我在主模块的第 6 行激活函数时,引发了 NameEror。我要补充!!!当我不运行我的主程序时..并将代码从主模块复制到终端..一切正常!!!另外,我想知道它是怎么发生的。
模块:主要
# Module : main
from class_checker import *
from blackboard import *
print(dir())
table = Board()
table.createStartPosition()
table.deck[2][5], table.deck[3][4] = table.deck[3][4], table.deck[2][5]
table.deck[5][2], table.deck[4][3] = table.deck[4][3], table.deck[5][2]
模块:class_checker
class Color():
white=0
black=1
class Checker():
# PARENT CLASS
IMG=("",'')
def __init__(self,coordinate,color):
self.color=color
self.IMG='' if color==Color.black else "" # !
self.coordinate=coordinate
def __repr__(self):
return self.IMG
class BlackChecker(Checker):
list_of_black_checkers=[]
def __init__(self,coordinate):
super().__init__(coordinate,Color.black)
def get_position(self):
return self.coordinate
@staticmethod
def FindEnemyNear():
HAVE_TO_CRASH =[]
possible_positions=( ("x+1","y-1") ,
("x-1","y-1") ,
("x-1","y+1") ,
("x+1","y+1") , )
ppp = ( ("x+2","y-2") ,
("x-2","y-2") ,
("x-2","y+2") ,
("x+2","y+2") , )
get_figure = table.get_FigureByPosition
for figure in BlackChecker.list_of_black_checkers:
x,y=figure.get_position()
if x in (2,3,4,5) and y in (2,3,4,5) :
for pp in range(len(possible_positions)):
figure_after=get_figure(eval(possible_positions[pp][0]),eval(possible_positions[pp][1]))
if figure_after and figure_after.color == Color.white and not get_figure(eval(ppp[pp]),
eval(ppp[pp])):
HAVE_TO_CRASH.append(figure)
return HAVE_TO_CRASH if HAVE_TO_CRASH else False
class WhiteChecker(Checker):
def __init__(self,coordinate):
super().__init__(coordinate,Color.white)
模块:黑板
class Board():
def __init__(self):
# create an empty deck
self.deck = [[0 for i in range(8)] for i in range(8)]
def createStartPosition(self):
first_pos = 1 # corner position
for raw in range(3):
for st in range(first_pos, 8, 2):
b = BlackChecker((raw, st))
self.deck[raw][st] = b
BlackChecker.list_of_black_checkers.append(b)
w = WhiteChecker((raw, st))
self.deck[7 - raw][7 - st] = w
# 1
first_pos = 1 - first_pos
def get_FigureByPosition(self,x,y):
return self.deck[y][x]
def __repr__(self):
# deck repl
res_deck = ""
for i in range(8):
res_deck += " ".join(map(str, self.deck[i])) + "\n"
return res_deck
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-3bf283b70adf>", line 1, in <module>
runfile('C:/Users/user/Desktop/ооп/Programs/Checkers/main.py', wdir='C:/Users/user/Desktop/ооп/Programs/Checkers')
File "C:\Program Files\JetBrains\PyCharm 2018.2.4\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2018.2.4\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/user/Desktop/ооп/Programs/Checkers/main.py", line 7, in <module>
table.createStartPosition()
File "C:\Users\user\Desktop\ооп\Programs\Checkers\blackboard.py", line 14, in createStartPosition
b = BlackChecker((raw, st))
NameError: name 'BlackChecker' is not defined
解决方案
您应该在“blackboard”模块中导入您的“class_checker”,因为它在那里不可见
推荐阅读
- header - 如何在其他层之上保留一个固定的标题?
- c - 如何让 getchar() 函数保持退格
- angular - Angular2:在ngOnInit中调用后端api后未填充全局变量
- sql - 包含 id 列表的 SQL Server 查询列
- java - Elasticsearch:使用过滤器获取所有文档
- php - 在 Laravel Eloquent 上选择最后一行组
- ios - 使用 NSMutableParagraphStyle 会导致表情符号出现问题
- python - 在 python 中使用多处理折叠数组突变
- mongodb - Aggregate, Mongoose - 忽略重复的结果
- angularjs - 混合角度应用程序中未定义导出