Если ваш объект не привязан к какому-либо внешнему состоянию, которое нуждается в очистке, несмотря ни на что (например, дескриптор файла / сокет), использование __del__
обычно не является правильным выбором.Это признак того, что вы делаете что-то не так.Например, если вы завернули свой del
в try...except
, то сделайте что-нибудь еще, предполагая, что рука была изменена, и вы ошиблись.Объекты могут (временно) поддерживаться блоком try..except
.del card
это не то же самое, что card.__del__()
, это НЕ гарантирует, что будет вызван __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 ---')