【发布时间】:2010-09-16 05:00:35
【问题描述】:
所以我有这个对象的代码。那个物体是你可以在石头剪刀布游戏中做出的动作。 现在,为了方便书写和查看,对象需要同时是整数(用于匹配协议)和字符串。
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 代码。对不起,如果它看起来有点开放式结束)
【问题讨论】:
-
如果您想了解更多关于实际问题/游戏的信息:progcomp.ucc.asn.au/FrontPage 这些动作是一件小事,我只是随机认为我可能想创建一个类型,作为一种更好的压制方式他们。
标签: oop coding-style python