将Python方法从一个类调用到另一个类

时间:2015-03-13 18:30:34

标签: python class methods

class A: 
    def getTotal(self)
        self.__total = 0
        for each in self.__hand:
            if each.getValue() == 1 and self.__total > 10:
                self.__total += 1
            elif each.getValue() == 1 and self.__total <10:
                self.__total += 11
            elif each.getValue() != 1:
                self.__total += each.getValue()
        return self.__total

class B: 
    def getTotal(self):
        return A.getTotal()

这对我不起作用。从B类方法调用时,如何让A类返回总数

1 个答案:

答案 0 :(得分:1)

您不能只是致电A.getTotal(),因为它是未绑定的方法;没有任何内容可以绑定self,因为你没有给它一个A的实例,你有状态。您需要在A实例上调用它。我们只需要先找到一个。

从我理解B的评论到玩家,A是该玩家的一手牌。据推测,在游戏中,玩家可以在玩多轮游戏时玩更多的牌。

在这种情况下,您可以从玩家到手牌,如self.hand。这是A的一个实例,您可以在 上调用getTotal()

class B:
    def getTotal(self):
        return self.hand.getTotal()

A也有__hand属性可能令人困惑;这可能不是该属性的最佳名称,因为它是当前手牌的卡片列表。在这种情况下,最好将其命名为__cards

B.getTotal()并非严格需要;您也可以使用instance_of_B.hand.getTotal(),例如到达实例属性并直接在手上调用getTotal()。但是,这或许可以揭示出类如何处理手,也许你想要处理不同的情况,如返回0如果有可能在程序中的某些点完全没有手

另一件事:__total中的A.getTotal()是一个局部变量;您不需要在self使用属性。删除self.前缀,只需将其命名为total

def getTotal(self)
    total = 0
    for each in self.__hand:
        if each.getValue() == 1:
            if total > 10:
                total += 1
            else:
                total += 11
        else:
            total += each.getValue()
    return total

我也简化了功能逻辑。