Así que tengo este código para un objeto. Ese objeto es un movimiento que puedes hacer en un juego de tijera de papeles de roca. Ahora, el objeto debe ser un número entero (para hacer coincidir un protocolo) y una cadena para facilitar la escritura y visualización.¿Cómo puedo hacer que este código Pythonic
class Move:
def __init__(self, setMove):
self.numToName = {0:"rock", 1:"paper",2:"scissors"}
self.nameToNum = dict(reversed(pairing) for pairing in self.numToName.items())
if setMove in self.numToName.keys():
self.mMove=setMove
else:
self.mMove=self.nameToNum.get(setMove) #make it to a number
def defeats(self):
return Move((self.mMove-1)%3)
def losesTo(self):
return Move((self.mMove+1)%3)
def tiesWith(self):
return self
#Operator overloading
def __eq__(A,B):
return A.mMove==B.mMove
def __gt__(A,B):
return A.defeats(B)
def __lt__(A,B):
return A.losesTo(B)
def __ge__(A,B):
return A>B or A==B
def __le__(A,B):
return A<B or A==B
def __str__(self):
return self.numToName.get(self.mMove);
def __int__(self):
return self.mMove;
Ahora soy un poco nuevo en python, proveniente de C y Java. Una gran ventaja de python es que solo hay una forma correcta de hacer algo. Otra cosa no es preocuparse por el tipo. Estoy muy explícitamente preocupado por el tipo aquí.
Así que no estoy seguro de cuál es la forma correcta de manejar estos objetos. Por el momento tengo un objeto que ser uno de los 3 tipos (o más, pero no estoy seguro de lo que haría) ¿Tal vez en su lugar debería utilizar los objetos de diferentes clases? y hacerlos singletons? También mi objeto es actualmente modificable después de la creación, lo cual es algo malo en mi mente.
¿Este es el código Pythonic, y cómo puedo hacerlo más elegante? (Creo que este es un buen ejemplo para usar, para ayudarme a determinar qué es lo que hace un buen código python. Lo siento si parece un poco abierto)
Si desea understan d más sobre el problema real/juego: http://progcomp.ucc.asn.au/FrontPage Las movidas son algo menor para las que al azar pensé que me gustaría crear un tipo, como una mejor forma de represtarlas. –