有没有办法让对象在自己销毁后调用函数? [python3]
Is there a way to let an object call a function after ist own destruction? [python3]
我想要 del object
上的回调函数
说明
我有一个 Player
Class.
而一个Player
在他的Player.hand = []
中可以有Card
的对象
Card
个实例可以通过 del <card_instance>
销毁
如果Player
的hand
中没有Cards
,则游戏结束。
为了仅在必要时检查,我希望 Card
调用 Player.check_status()
函数,该函数检查游戏是否结束 在其自身销毁后 .
这可能吗?
代码
class Player:
self.hand = [...<Cards>...]
def check_status(self):
if self.hand == []:
print("--- GAME OVER ---")
class Card:
self.player = <Player_instance>
def __del__(self):
del self
self.player.check_status() # <----- I want to do something like this
你为什么不在每次移动后立即计算卡片数量,如果卡片数量等于 0 则提高你的游戏结束状态。
我在想:
- 定义一个计算手牌数量的函数。
- 创建一个条件语句来检查手头的卡片是否等于 0。
- 创建一个可以重新开始游戏的游戏结束函数。
除非您的 object 与某些无论如何都需要清理的外部状态相关联(例如文件 handle/socket),否则使用 __del__
通常不是正确的选择。这表明你可能做错了什么。例如,如果您将 del
包裹在 try...except
中,然后假设手牌已更改,那么您就错了。 Objects 可以(暂时)通过 try..except
块保持活动状态。 del card
与 card.__del__()
不是 相同的东西,它不保证 __del__
会被调用。
同样,通常您希望 parent 管理它的 children,而不是相反。玩家控制他们的牌,牌不控制玩家。
只要明确说明你的行为:
class Player:
def __init__(self):
self.hand = []
def add_card(self, card):
self.hand.append(card)
def remove_card(self, card):
self.hand.remove(card)
if not self.hand:
print('--- GAME OVER ---')
我想要 del object
说明
我有一个 Player
Class.
而一个Player
在他的Player.hand = []
Card
的对象
Card
个实例可以通过 del <card_instance>
如果Player
的hand
中没有Cards
,则游戏结束。
为了仅在必要时检查,我希望 Card
调用 Player.check_status()
函数,该函数检查游戏是否结束 在其自身销毁后 .
这可能吗?
代码
class Player:
self.hand = [...<Cards>...]
def check_status(self):
if self.hand == []:
print("--- GAME OVER ---")
class Card:
self.player = <Player_instance>
def __del__(self):
del self
self.player.check_status() # <----- I want to do something like this
你为什么不在每次移动后立即计算卡片数量,如果卡片数量等于 0 则提高你的游戏结束状态。
我在想:
- 定义一个计算手牌数量的函数。
- 创建一个条件语句来检查手头的卡片是否等于 0。
- 创建一个可以重新开始游戏的游戏结束函数。
除非您的 object 与某些无论如何都需要清理的外部状态相关联(例如文件 handle/socket),否则使用 __del__
通常不是正确的选择。这表明你可能做错了什么。例如,如果您将 del
包裹在 try...except
中,然后假设手牌已更改,那么您就错了。 Objects 可以(暂时)通过 try..except
块保持活动状态。 del card
与 card.__del__()
不是 相同的东西,它不保证 __del__
会被调用。
同样,通常您希望 parent 管理它的 children,而不是相反。玩家控制他们的牌,牌不控制玩家。
只要明确说明你的行为:
class Player:
def __init__(self):
self.hand = []
def add_card(self, card):
self.hand.append(card)
def remove_card(self, card):
self.hand.remove(card)
if not self.hand:
print('--- GAME OVER ---')