繁体   English   中英

从一个类到另一个类调用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()

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

您不能只调用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()中的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

我也简化了功能逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM