社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Proxycon • 6 年前 • 2114 次点击  

我想要一个回调函数 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 ---')