python - 关于函数类和类方法的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”的一个类方法?可能“玩家”类除了记分、跟踪谁在发牌以及分数是多少之外根本没有做太多事情?
简而言之,我无法将类理解为交互和执行动作的对象,我制作了其他类,它们最终像迷你数据库一样工作,而不是在方法中使用太多复杂性。
解决方案
设计类和对象是一门艺术。使用类的根本目的是信息隐藏。程序的其余部分不必知道一副纸牌是如何实现的,这样您就可以在不重新设计整个程序的情况下更改实现。因此,您创建了一个Deck
类,该类将所有数据都存储在内部,并且只向外界公开您想要使用卡片组执行的操作,例如shuffle
和deal_card
。一个Player
类可能包括 ahand
和 a score
,以及添加另一张牌的功能,并且该Game
对象(也许)可以协调将牌发到手中并触发游戏。
您拥有的代码混合了所有这些。它必须知道一副牌是如何实现的,一手牌是如何实现的,以及一张牌是如何翻转的。
顺便说一句,为了真实起见,你最好洗牌并从顶部发牌,而不是使用random.choice
.
推荐阅读
- mysql - 返回 404 的基本 CRUD(MySQL + Express + VueJS + NodeJS)
- optimization - CPLEX 总和
- c# - 实体框架在列中存储对象
- powershell - 将存储在 svn 上的文件与本地驱动器上的文件进行比较
- regex - Angular Validator Pattern 适用于 HTML,但不适用于 TypeScript
- android - 64K 限制在 Android 中没有意义
- node.js - 如何使用适用于 nodejs 的 npm 模块 ssh2 下载包含所有文件和文件夹的目录?
- c - 在 pipe() 和 fork() 之后,为什么 parent 中的 close(fd[1]) 会关闭 *child's* fd[1]?
- javascript - 将计算值绑定到自定义指令
- nativescript - Nativescript angular:处理不同页面上的android后退按钮