所以我最近开始使用python。我正在做一个涉及课程的小项目。我在大多数情况下都有使用自己的约定......等等我还没想到的是可能与我的问题有关的名称错误。
这是一些代码,它构成了一个类来创建一个转弯对象,我可以在战斗开始时使用它,并允许我定期切换转弯。 (游戏将成为一个口袋妖怪战斗模拟器)
class turn:
TURNS = ("player","computer")
curr=0
def __init__(self):
self.currentTurn=turn.TURNS[turn.curr]
def getTurn(self):
return turn.TURNS[turn.curr]
def switch(self):
if turn.curr == 0:
turn.curr = 1
else:
turn.curr = 0
if turn.curr==0:
print "It's your move! \n"
self.currentTurn=TURNS[turn.curr]
所以我的问题是:
是否有任何python功能允许我在引用类vairables时省略类名。我觉得应该知道在类定义中查看这些变量,但事实并非如此。另外,如果我想在同一个类中使用辅助方法,我似乎必须用self作为前缀。
到底有没有?
答案 0 :(得分:1)
您可以使用type(self)
或self.__class__
来引用当前的课程。考虑到该值在类被子类化时会发生变化。
所以:
class turn(object):
def __init__(self):
cls = type(self)
self.currentTurn = cls.TURNS[cls.curr]
def getTurn(self):
cls = type(self)
return cls.TURNS[cls.curr]
def switch(self):
cls = type(self)
cls.curr = 1 - cls.curr
if cls.curr == 0:
print "It's your move! \n"
self.currentTurn = cls.TURNS[cls.curr]
但是如果您要创建turns
的子类,那么当您调用{{}时,设置 cls.curr
将在子类上完成,而不是turn
父类。 1}}。
您也可以使用subclass().switch()
属性,但使用内置函数可以让代码更易读。
但请注意,只要没有具有相同名称的实例属性,您就可以在self.__class__
上引用您的类属性以及;以下也适用:
self
设置类属性仍需要您直接在类上执行此操作,而不是class turn(object):
def __init__(self):
self.currentTurn = self.TURNS[self.curr]
def getTurn(self):
return self.TURNS[self.curr]
def switch(self):
cls = type(self)
cls.curr = 1 - cls.curr
if self.curr == 0:
print "It's your move! \n"
self.currentTurn = self.TURNS[self.curr]
。