有没有办法让对象在自己销毁后调用函数? [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>

销毁

如果Playerhand中没有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 则提高你的游戏结束状态。

我在想:

  1. 定义一个计算手牌数量的函数。
  2. 创建一个条件语句来检查手头的卡片是否等于 0。
  3. 创建一个可以重新开始游戏的游戏结束函数。

除非您的 object 与某些无论如何都需要清理的外部状态相关联(例如文件 handle/socket),否则使用 __del__ 通常不是正确的选择。这表明你可能做错了什么。例如,如果您将 del 包裹在 try...except 中,然后假设手牌已更改,那么您就错了。 Objects 可以(暂时)通过 try..except 块保持活动状态。 del cardcard.__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 ---')