首页 > 解决方案 > 关于函数类和类方法的Python问题

问题描述

我对中级编程相当陌生,但已经玩了一段时间的代码。目前我正在制作一个简单的纸牌游戏。这个问题是我不确定在哪里使用我的函数或何时使它们成为类方法。

例如,这是一个简单的函数,它向每个玩家(从预定义的列表中)分发 5 张牌,然后从牌组顶部翻出一张牌(实际上都是随机选择)。卡片作为项目列表(3 个列表)返回。我还创建了一个名为“Player”的类。

p1_hand = []
p2_hand = []
flip_card = []

def deal_deck():
    count = 0
    for i in range(0, 10, 1):
        count += 1
        if count % 2 == 0:
            card = random.choice(deck)
            p2_hand.append(card)
            deck.remove(card)
        else:
            card = random.choice(deck)
            p1_hand.append(card)
            deck.remove(card)
        if count == 10:
            flip_card.append(random.choice(deck))
    return p2_hand, p1_hand, flip_card

在这个例子中,它只是一个交易,所以我想知道为什么它需要是“Player”的一个类方法?可能“玩家”类除了记分、跟踪谁在发牌以及分数是多少之外根本没有做太多事情?

简而言之,我无法将类理解为交互和执行动作的对象,我制作了其他类,它们最终像迷你数据库一样工作,而不是在方法中使用太多复杂性。

标签: pythonfunctionclassmethodsscope

解决方案


设计类和对象是一门艺术。使用类的根本目的是信息隐藏。程序的其余部分不必知道一副纸牌是如何实现的,这样您就可以在不重新设计整个程序的情况下更改实现。因此,您创建了一个Deck类,该类将所有数据都存储在内部,并且只向外界公开您想要使用卡片组执行的操作,例如shuffledeal_card。一个Player类可能包括 ahand和 a score,以及添加另一张牌的功能,并且该Game对象(也许)可以协调将牌发到手中并触发游戏。

您拥有的代码混合了所有这些。它必须知道一副牌是如何实现的,一手牌是如何实现的,以及一张牌是如何翻转的。

顺便说一句,为了真实起见,你最好洗牌并从顶部发牌,而不是使用random.choice.


推荐阅读