Py学习  »  Python

有没有一种方法可以让一个对象在自身被破坏后调用函数?[ Python 3]

Proxycon • 6 年前 • 1948 次点击  

我想要一个回调函数 del object


解释

我有一个 Player 班级。

和A 玩家 可以有对象 Card 在他的 Player.hand = []

实例可以通过 del <card_instance>

如果A 玩家 没有 Cards 在他的 hand ,游戏结束。

只有在必要的时候才检查,我想 打电话给 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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41265
文章 [ 2 ]  |  最新文章 6 年前
Lee You
Reply   •   1 楼
Lee You    7 年前

为什么你不在每次移动后立即计算牌的数量,如果牌的数量等于0,那么提高你的游戏状态。

我在想:

  1. 定义一个计算现有卡片数量的函数。
  2. 创建一个条件语句,检查现有卡是否等于0。
  3. 创建一个游戏超过功能,它有能力重新开始游戏。
TkTech
Reply   •   2 楼
TkTech    7 年前

除非将对象绑定到需要清理的外部状态(例如文件句柄/套接字),否则使用 __del__ 通常不是正确的选择。这表明你可能做错了什么。例如,如果您将 del 在一个 try...except ,然后假设手已经换过,再做其他事情,你就错了。对象可以(暂时)由 try..except 块。 del card 同一件事 card.__del__() ,它不能保证 埃尔德勒斯 将被调用。

同样,通常你希望你的父母管理孩子,而不是相反。玩家控制他们的牌,牌不能控制玩家。

只需明确你的行为:

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 ---')