![](/img/trans.png)
[英]Python Inherit from one class but override method calling another class?
[英]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.