所以我有这个代码的对象。这个对象是你可以在岩石剪刀游戏中做出的一个举动。 现在,该对象需要既是一个整数(用于匹配协议)和一个字符串以方便编写和查看。我如何使这个代码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;
现在我有点新来python,来自C和Java背景。 python中的一件大事就是只有一种正确的方法来做某件事。 另一件事是不担心类型。 我很明确地担心这里输入。
所以我不知道什么是正确的方式来处理这些对象。 目前我有一个对象,它是任何3种类型之一(或更多,但我不知道会做什么) 也许我应该使用不同类的对象?并让他们成为单身人士? 另外我的对象目前在创建后可以修改,这在我的脑海中是一件坏事。
所以这段代码是Pythonic,我怎样才能让它更优雅? (我想这是一个很好的例子,可以帮助我理清python代码的作用,对不起,如果看起来有点开放式结尾)
如果你想understan d更多的实际问题/游戏是显而易见的/progcomp.ucc.asn.au/FrontPage 这些举动是次要的事情,我只是随意地想,我可能想创建一个类型,作为更好的方式来表扬他们。正如我所说的 – 2010-09-16 05:49:32