Reputation: 29
I can't undarstand,why my class BlackChecker can't create an instance.I have 3 module.I imported 2 modules in my main module. And NameEror raised, when i activate function in line 6 in main module. I want to add !!! When i don't run my main program.. and copy code from main module to terminal .. ALL WORKS!!! Also, i wan't to know how does it happen.
# 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 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
Upvotes: 0
Views: 50
Reputation: 720
You need to import class_checker
module in blackboard.py and change to the following in blackboard.py;
b = class_checker.BlackChecker((raw,st))
class_checker.BlackChecker.list_of_black_checkers.append(b)
w = class_checker.WhiteChecker((raw, st))
Your py file should look like this;
import class_checker
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 = class_checker.BlackChecker((raw,st))
self.deck[raw][st] = b
class_checker.BlackChecker.list_of_black_checkers.append(b)
w = class_checker.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
You can also use from class_check import *
at the top of the .py and leave the class_checker off of the other parts of the code, but in my opinion it is more readable to clairfy which module it is coming from.
Upvotes: 0
Reputation: 11
You should import your "class_checker" in "blackboard" module, because it's not visible there
Upvotes: 1