0

尽可能接近标题。我对 OOP(和一般编码)非常陌生,并且想创建一个玩二十一点的程序。我想将创建的对象自动保存到列表中,因此一旦创建,我就可以使用列表循环浏览它们(我想创建播放器对象,但将变量名(正确的词???)保存到列表中一次它是使用用户输入创建的,我可以自动访问它们。

到目前为止,我已经构建了这个:

ROSTER = []   

class Player():
"""player in the game"""

    def __init__(self, name, score= 0):
        self.name = name
        self.score = score
        ROSTER.append(self.name)

但当然,这只给了我放入变量 self.name 的名称......我怎样才能捕获变量名称(再次正确的术语?)。self.name 不会(afaik)让我通过以下方式访问各个对象:

请原谅废话格式。=/

另外,如果我使用了错误的术语,请纠正我。就掌握所有术语而言,自学有点困难。

编辑:对不起,我的帖子令人困惑。我发布的代码是为了显示一个死胡同,而不是我要找的东西,而且我的术语很糟糕(我大部分时间都觉得自己像个外国人)。当我说变量名时,我想我应该说“对象名”(?)所以:

p1 = 玩家(“鲍勃”)

p2 = 玩家(“起诉”)

我想要 ["p1","p2"] (或者当我尝试调用它们时,如果字符串格式会给我带来问题,无论适当的方式是什么。)

再次,对于超级混乱的第一篇文章感到抱歉。希望这次编辑更清晰,更专注。

4

2 回答 2

2

你可以self换成名册。IE:

ROSTER = []

class Player():
    def __init__(self, name, score = 0):
        self.name = name
        self.score = score
        ROSTER.append(self)

然后你会使用这样的ROSTER列表:

>>> p1 = Player("Jane")
>>> p2 = Player("John")
>>> ROSTER
[<__main__.Player instance at 0x10a937a70>, <__main__.Player instance at 0x10a937a28>]
>>> for p in ROSTER:
...   print p.name, p.score
... 
Jane 0
John 0

或者,也许更好,您可以将 ROSTER 设为字典

ROSTER = dict()

class Player():
    def __init__(self, name, score = 0):
        self.name = name
        self.score = score
        ROSTER[self.name] = self

这样,您可以使用 名称访问播放器对象ROSTER[name],并且可以使用 循环访问它们ROSTER.values()。例如:

>>> p1 = Player("Jane")
>>> p2 = Player("John")
>>> print ROSTER["Jane"].name, ROSTER["Jane"].score
Jane 0
>>> print ROSTER["John"].name, ROSTER["John"].score
John 0
>>> for p in ROSTER.values():
...   print p.name, p.score
... 
Jane 0
John 0
于 2012-06-22T06:10:30.173 回答
1

你在说这个吗?

ROSTER = []   

class Player():

    def __init__(self, name, score= 0):
        self.name = name
        self.score = score
        ROSTER.append(self)

a=Player('Jack',100)
b=Player('Blackk',1000)
c=Player('Mike')

for x in ROSTER:
    print(x.name,x.score)

输出:

Jack 100
Blackk 1000
Mike 0
于 2012-06-22T06:23:25.727 回答