Ich versuche, das ui Objekt innerhalb der Pfandklasse zu verwenden und ich definiere und initiiere ui außerhalb alles, also ist es global richtig? Ich habe hier nach Fragen zur Verwendung von Variablen außerhalb von Klassen gesucht, aber sie scheinen sich alle auf .sel zu beziehen, die ich beim Initiieren des Chess-Objekts in der UI-Klasse verwendet habe.Warum kann ich nicht auf eine Instanz einer Klasse zugreifen, die global in einer anderen Klasse definiert ist?
Die # repräsentieren Code-Bits, die ich ausgeschnitten habe, um die Lesbarkeit zu erleichtern.
class UI:
def ___init__(self):
self.chess = Chess()
# Calls main menu function which goes to a new game option
def newGame(self):
self.chess.startGame()
while len(self.chess.pieces[0] == 2): # Which is index for Kings
# Game, which is where *move* is called
class Chess:
def startGame(self):
self.chessBoard = Grid(9,9)
self.pieces = []
self.pawns = []
for i in range(8):
self.pawns.append(PawnObject(x,y,side))
self.pieces.append(self.pawns)
class Grid:
# Init method
def cellOccupied(self,x,y):
# This function checks if a place is empty
# If empty, return false else, true
class Object:
# Sets x, y, width, height
class ChessPiece:
# Child of Object sets side (black or white)
class PawnObject:
def move(self,newX,newY):
if ui.chess.chessBoard.cellOccupied(newX,newY) == False:
# Move
# More code
ui = UI()
Traceback: https://gyazo.com/33e5b37b5290ff88433b29874c117ad7
Bin ich etwas blendend falsch? Ich denke, die Art und Weise, wie ich das alles programmiert habe, ist sehr ineffizient, da ich immer noch lerne, also ist das ein Ergebnis davon? Vielen Dank.
Ich denke, Sie haben zu viele Informationen ausgeschnitten; Wir können nicht sehen, was das PawnObject erzeugt und 'move' aufrufen - wenn der Fehler tatsächlich dort auftritt, was wir auch nicht sicher wissen. Bitte zeigen Sie zumindest den vollständigen Traceback. –
@ user3457241 - 'PawnObject' ist in Ihrem Code-Auszug kein Kind von' ChessPiece' ... klicken Sie auf die Bearbeitungsschaltfläche unter den Tags Ihrer Frage und korrigieren Sie diese bitte. Löschen Sie dann Ihren Kommentar, der das sagt.Es sei denn, Sie denken, dass Ihr Code richtig geschrieben ist. In diesem Fall werde ich Sie wissen lassen, dass Sie falsch liegen ... das könnte Teil Ihres Problems sein. – ArtOfWarfare
@DanielRoseman Wenn die Funktion startGame() aufgerufen wird, werden alle Teile zur Liste der Teile hinzugefügt, die zum Gitter hinzugefügt werden. Die Move-Funktion wird innerhalb der Benutzeroberfläche in der Hauptschleife eines Schachspiels aufgerufen, wenn der Spieler entschieden hat, ein Stück irgendwo zu bewegen. Wäre es hilfreich, den gesamten Code anzuzeigen? Ich habe den Traceback meinem Post hinzugefügt. –