Python类中的变量命名

时间:2014-07-22 12:49:35

标签: python class scope

所以我最近开始使用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作为前缀。

到底有没有?

1 个答案:

答案 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]