我正在学习面向对象编程,很难掌握不同班级之间的互动。我读了这么多的例子,但大多数都展示了单个类是如何工作的,很明显,我想看看不同的类之间是如何相互作用的。如果有人有一个很好的例子,说明不同的类是如何相互作用的,那就太好了。你知道吗
这里我创建Deck
实例newDeck
,然后创建Player
实例p1
。然后我做这个:
newCard.append(player.generateCard(newDeck))
其中player
是p1
,所以我调用Player
方法generateCard()
,并传递类Deck
的newDeck
实例。这允许吗?你知道吗
这里我得到一个错误:
File "poker.py", line 67, in startGame
newCard.append(player.generateCard(newDeck))
AttributeError: 'str' object has no attribute 'generateCard'`
我的代码:
import random, string, sys
class Deck:
def __init__(self):
self.suits = ['s', 'h', 'd', 'c']
self.ranks = ['2', '3', '4', '5', '6' ,'7', '8', '9', '10', 'J', 'Q', 'K', 'A']
self.deck = [i+j for i in self.ranks for j in self.suits]
random.shuffle(self.deck)
def selectCards(self):
self.selectedCard = self.deck.pop()
return self.selectedCard
class Player:
def __init__(self, amount):
self.amount = amount
self.card = []
def generateCard(self, whichDeck):
self.whichDeck = whichDeck
holeCards = 2
for i in range(0, holeCards):
selCard = self.whichDeck.selectCards()
if len(selCard) == 2:
self.cardRank = list(selCard[0])
else:
self.cardRank = list('10')
self.cardSuit = list(selCard[-1])
self.generatedCard = list(self.cardRank + self.cardSuit)
self.card.append(self.generatedCard)
return self.card
class Game:
def __init__(self, numPlayers, startingStack):
self.startingStack = startingStack
self.numPlayers = numPlayers
def startGame(self):
newDeck = Deck()
playerList = ['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8']
currentPlayer = 0
for player in playerList:
player = Player(self.startingStack)
currentPlayer += 1
if currentPlayer == self.numPlayers:
break
totalPlayers = currentPlayer
# -------------------------- GAME STARTS ---------------------------
newCard = []
currentPlayer = 0
for player in playerList:
newCard.append(player.generateCard(newDeck)) # ERROR IS HERE
if currentPlayer == self.numPlayers:
break
def main():
numberOfPlayers = 1
playerStack = 100
newGame = Game(numberOfPlayers, playerStack)
newGame.startGame()
if __name__ == '__main__':
main()
如果没有任何
Player
实例,请创建string
实例列表:然后在循环中你就这么做了
这个局部变量
player
丢失了,它不会神奇地附加到你的playerList
简单地做一些
而不是你的循环
你的
playerList
对象仍然是字符串列表。你的循环:将
player
重新绑定到Player()
实例,但这不会更改playerList
对象。事实上,当您进入下一个迭代时,Player()
实例再次被丢弃,因为没有其他引用它。你知道吗for player in playerList
将player
依次绑定到列表中的每个字符串,但引用不起相反的作用,player
只是另一个Python名称,另一个引用包含在playerList
中的同一对象。将不同的对象赋给它也不会改变从中获取字符串的列表。你知道吗你可能想在这里建立一个新的列表:
但是,您在这里完全忽略了
playerList
中的字符串;也可以只构建列表而不咨询以下内容:但是你也不需要
players
作为一个单独的列表:相关问题 更多 >
编程相关推荐