处理在没有全局变量的函数中使用的变量

use*_*661 3 python oop encapsulation

所以我正在开发一个基本的文字游戏,你用它来处理一个字母的"手"(字典对象),用来创建单词并获得积分.

这个"手"用于许多功能的参数:计算玩家的分数,在玩家使用一个或多个字母后更新手中的字母数,显示手,检查玩家单词的有效性,等等

从我读过的所有内容中,我知道如果可以的话我应该避免使用全局变量(尽管我还不完全确定原因).

那么我可以将其他一般方法用于许多使用"hand"作为参数的函数?

Mar*_*cin 9

它被称为对象.创建具有共享状态的以及共享该状态的函数.

这比全局变量更好的原因是它是同一概念的更受限制的版本 - 您可以清楚地看到哪些函数正在操纵这些变量,并且记录(并强制执行)这些变量上的预期不变量.对于全局变量,最终很容易拥有对共享变量状态有不同期望的函数.

它还允许您拥有同一对象的多个副本,因此您不必将变量转换为集合,而是在集合的成员之间进行关联,而是拥有一组对象,这使您的代码更简单.然后,仅通过您定义的函数来操纵这些对象是一件简单的事情.


Jor*_*ley 8

使用类封套...见下文...游戏意识到双手

class Hand:
    def __init__(self):
       num_cards = 7
       self.cards = ["a" for i in range(num_cards)]

class Game:
    def __init__(self,num_hands=2):
        self.hands = [Hand() for i in range(num_hands)]
        self.current_turn = 0 
    def play(self):
        self.hands[self.current_turn].play()
        self.current_turn = (self.current_turn+1)%len(self.hands)
Run Code Online (Sandbox Code Playgroud)

这是Python 3代码; Python 2中的类应该派生自object.

......虽然他们不需要.如果不这样做,他们会失去一些功能