从一个 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
我也稍微简化了函数逻辑。
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
我也稍微简化了函数逻辑。