首页 > 解决方案 > 实例变量不更新

问题描述

我不知道为什么类中的变量没有更新。

class Pile:
    def __init__(self, cards):
        self.cards = cards

    def __str__(self):
        result = ' '.join(self.cards)
        return result

    def __repr__(self):
        return f'Pile({self.cards})'

    def flip(self):
        self.cards.reverse()
        return eval(f'Pile({self.cards})')

这是我的代码的一部分。当我在下面运行这段代码时,

cards = Pile(['AH', '3S', 'KC'])
print(cards)
# AH 3S KC
cards
# Pile(['AH', '3S', 'KC'])
cards.flip().flip()
# Pile(['AH', '3S', 'KC'])
print(cards)

我期待'AH 3S KC',但我得到'KC 3S AH'。'KC 3S AH' 是cards.flip()的结果。

我认为cards.flip().flip()这部分不起作用,因为当我写cards.flip()和再次cards.flip()时,这正是我想要的。我不知道这是什么问题。你能解释一下吗?感谢您的阅读。

标签: pythonoop

解决方案


摆脱方法中的eval功能flip()。反转方法Pile中的实例,flip然后返回它。

代码


class Pile:
    def __init__(self, cards):
        self.cards = cards

    def __str__(self):
        result = ' '.join(self.cards)
        return result

    def __repr__(self):
        return f'Pile({self.cards})'

    def flip(self):
        self.cards.reverse()
        return self

cards = Pile(['AH', '3S', 'KC'])
print(cards)
# AH 3S KC
cards
# Pile(['AH', '3S', 'KC'])
cards.flip().flip()

# Pile(['AH', '3S', 'KC'])
print(cards)

输出

在此处输入图像描述


推荐阅读