J
John Salerno
This is purely for fun and learning, so I know there are probably better ways of creating a chess program. Right now I'm just curious about my specific question, but I'd love to hear any other advice as well.
Basically, I'm wondering if I'm using the class method properly with the move method. The reason I did it this way is because every chess piece will obviously have its own move method, yet they will all need to mark the pieceas moved, so I figure that's best written once in the superclass.
This works, but doing it this way seems weird, since the point of a class method is that it can be called by the class itself, even before instances have been created. Yet the way I've implemented it, it is necessarily tied to being called on an instance. Is this wrong? Is there a better way to do what I'm doing with move?
Also, do I need the @classmethod decorator? The book I'm reading says to use it (and @staticmethod), but the following code works without it.
Thanks.
class ChessPiece:
def __init__(self, position, label, has_moved):
try:
self.position = (position[0], int(position[1]))
except TypeError:
self.position = position
self.label = label
self.has_moved = has_moved
def move(cls, self):
self.has_moved = True
class Pawn(ChessPiece):
def __init__(self, position=None, label=1, has_moved=False):
super().__init__(position, label, has_moved)
def move(self):
super().move(self)
self.position = (chr(ord(self.position[0]) + 1), self.position[1]+ 1)
Basically, I'm wondering if I'm using the class method properly with the move method. The reason I did it this way is because every chess piece will obviously have its own move method, yet they will all need to mark the pieceas moved, so I figure that's best written once in the superclass.
This works, but doing it this way seems weird, since the point of a class method is that it can be called by the class itself, even before instances have been created. Yet the way I've implemented it, it is necessarily tied to being called on an instance. Is this wrong? Is there a better way to do what I'm doing with move?
Also, do I need the @classmethod decorator? The book I'm reading says to use it (and @staticmethod), but the following code works without it.
Thanks.
class ChessPiece:
def __init__(self, position, label, has_moved):
try:
self.position = (position[0], int(position[1]))
except TypeError:
self.position = position
self.label = label
self.has_moved = has_moved
def move(cls, self):
self.has_moved = True
class Pawn(ChessPiece):
def __init__(self, position=None, label=1, has_moved=False):
super().__init__(position, label, has_moved)
def move(self):
super().move(self)
self.position = (chr(ord(self.position[0]) + 1), self.position[1]+ 1)