从一个 class 调用另一个 Python 方法

Calling a Python method from one class to another

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()

这对我不起作用。当从 class B 的方法

调用时,我怎样才能使 class A 达到 return

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

从评论中我了解到 B 给玩家,A 是该玩家的一手牌。据推测,在一场比赛中,随着多轮比赛,玩家可以玩更多的牌。

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

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

A 也有一个 __hand 属性,这里可能会造成混淆;这可能不是该属性的最佳名称,因为它是当前手牌的卡片列表。在那种情况下,它可能更好地命名为 __cards

B.getTotal() 不是严格需要的;您也可以只使用 instance_of_B.hand.getTotal(),例如直接进入实例属性并直接在手上调用 getTotal()。但这可能会过多地揭示 class 如何处理手牌,也许您想处理不同的情况,例如 return 0 如果有可能在某些时候程序根本就没有手

还有一件事:A.getTotal()中的__total是局部变量;您不需要在 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

我也稍微简化了函数逻辑。