У вас есть круговой импорт.
В ChessBoard
вы импортируете Pieces
:
from classes.Pieces import *
На данный момент ChessBoard
в основном пусто ,потому что единственная строка, которая завершила выполнение - это from tkinter import *
.
И при импорте Pieces
вы затем импортируете этот пустой ChessBoard
модуль:
from classes.ChessBoard import *
Нет ChessBoard
класс на данный момент;все, что вы импортировали, это tkinter
имена.
Вы можете увидеть это в трассировке:
File "d:/Paul/Document/Python/Projet Echecs/luncher.py", line 12, in <module>
from classes.ChessBoard import *
ChessBoard
импортируется luncher.py
File "d:\Paul\Document\Python\Projet Echecs\classes\ChessBoard.py", line 4, in <module>
from classes.Pieces import *
, который в строке 4 импортирует Pieces
, а
File "d:\Paul\Document\Python\Projet Echecs\classes\Pieces.py", line 15, in <module>
class Pieces(ChessBoard):
пытается использовать ChessBoard
, но этот класс определяется только несколькими строками после строки 4.
Если вы должны иметь доступ к классу Pieces
в ChessBoard
, вам придется переместить строку импорта ниже определения class ChessBoard
.
Однако я думаю, что ваша фундаментальная ошибка здесьозначает, что класс Pieces
наследуется от ChessBoard
на всех . Шахматные фигуры не шахматная доска! Если вам необходимо разделить некоторые функции между классом ChessBoard
и классом Pieces
, выделите их в отдельный модуль, который затем используют оба.
Наследование классов - это способ обмена функциями , где этоимеет смысл и классифицировать ваши классы. Шахматная доска и фигуры на доске обычно не разделяют функциональность;например, доска не делает ходов и не принадлежит одному игроку или другому.
Отсутствие наследования от класса ChessBoard
упростит ваши два других модуля до:
'''Ce module contient la classe Piece'''
# On peu modifier la variable path pour charger les images
path = "D:\\Paul\\Document\\Python\\Projet Echecs\\img\\Pieces\\"
class Pieces:
def __init__(self, board, X, Y, color):
self.board
self.color = color
self.coordinateX = X
self.coordinatY = Y
и
from tkinter import *
from classes.Pieces import path, Pieces
class Rook(Pieces):
def __init__(self, board, X, Y, color):
Pieces.__init__(self, board, X, Y, color)
self.img = PhotoImage(file=path + "T{}.gif".format(self.color[0].upper()))
self.board.create_image(self.coordinatX, self.coordinatY, anchor=NW, image=self.img)
Обратите внимание, что я также дал классу Pieces
аргумент board
, поскольку вы используете его в Rook.__init__()
. Поэтому, когда вы создаете экземпляр Rook
, передайте на доску:
test = Rook(self, 303, 532, "Noir")