类:我不太明白它们
我现在正在读一本书,书名叫《如何像计算机科学家一样思考》。
最近我在书里写了一段代码:
class Card:
suitList = ["Clubs", "Diamonds", "Hearts", "Spades"]
rankList = ["narf", "Ace", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "Jack", "Queen", "King"]
def __init__(self, suit=0, rank=0):
self.suit = suit
self.rank = rank
def __str__(self):
return (self.rankList[self.rank] + " of " + self.suitList[self.suit])
def __cmp__(self, other):
#check the suits
if self.suit > other.suit: return 1
if self.suit < other.suit: return -1
#suits are the same... check ranks
if self.rank > other.rank: return 1
if self.rank < other.rank: return -1
#ranks are the same... it's a tie
return 0
class Deck:
def __init__(self):
self.cards = []
for suit in range(4):
for rank in range(1, 14):
self.cards.append(Card(suit, rank))
def printDeck(self):
for card in self.cards:
print card
def __str__(self):
s = ""
for i in range(len(self.cards)):
s = s + " "*i +str(self.cards[i]) + "\n"
return s
def shuffle(self):
import random
nCards = len(self.cards)
for i in range(nCards):
j = random.randrange(i, nCards)
self.cards[i], self.cards[j] = self.cards[j], self.cards[i]
def removeCard(self, card):
if card in self.cards:
self.cards.remove(card)
return 1
else:
return 0
def popCard(self):
return self.cards.pop()
def isEmpty(self):
return (len(self.cards) == 0)
def deal(self, hands, nCards=999):
nHands = len(hands)
for i in range(nCards):
if self.isEmpty(): break
card = self.popCard()
hand = hands[i % nHands]
hand.addCard(card)
class Hand(Deck):
def __init__(self, name=""):
self.cards = []
self.name = name
def addCard(self,card):
self.cards.append(card)
def __str__(self):
s = "Hand " + self.name
if self.isEmpty():
return s + "is empty\n"
else:
return s + " contains\n" + Deck.__str__(self)
class CardGame:
def __init__(self):
self.deck = Deck
self.deck.shuffle()
deck = Deck()
deck.shuffle()
hand = Hand("frank")
deck.deal([hand], 5)
print hand
我明白里面的self是什么意思,但我不太明白
self.deck.shuffle()
这个东西是从哪里来的,以及它为什么会出现在__init__
这个函数里。我需要一个关于类的好解释,还有一些日常的例子来帮助我理解。
1 个回答
2
__init__
这个函数的作用就是它名字所暗示的:初始化一个类的实例。
可以把类想象成饼干模具,而对象就是用这个模具做出来的饼干:类是用来创建和操作内存中实例的蓝图。
那么,类和对象有什么用呢?它们把数据和功能结合在一起,形成一个完整的单元。
计算机科学中的每一种语言都试图帮助你处理一件事:管理复杂性。它把细节封装起来,隐藏在用户看不见的地方,这样用户只需要关注这个类如何与他们的实际生活经验相对应,就能有效地使用它。
还有一个建议:不要使用类。Python是一种结合了面向对象和函数式编程的语言。如果你不理解类,可以先不使用它们。继续学习,直到你明白为止,然后再开始把它们融入到你的设计中。