-4

私は現在、「コンピューター科学者のように考える方法」という本に取り組んでいます。

今、私は本から作ったこのコードを手に入れました

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.deck.shuffle()

から来て、なぜそれが__init__関数にあるのか。私が必要としているのは、クラスの適切な説明と、それを説明する日常的な使用法です。

4

1 に答える 1

2

この__init__関数は、名前が意味することを実行します。クラスのインスタンスを初期化します。

クラスはCookieカッターに対するものであり、オブジェクトはCookieに対するものです。これは、メモリ内のインスタンスを作成して操作するための青写真です。

クラスとオブジェクトは何に適していますか?データと機能を1つのユニットにカプセル化します。

コンピュータサイエンスのすべての言語は、複雑さの管理という1つのことであなたを助けようとします。詳細をカプセル化し、ユーザーから隠します。そのため、ユーザーは、そのクラスを効果的に使用するために、実際のエクスペリエンスにどのようにマッピングするかを考えるだけで済みます。

別のアイデアがあります。クラスを使用しないでください。Pythonは、オブジェクト指向プログラミングと関数型プログラミングの優れたハイブリッドです。クラスを理解していない場合は、クラスなしでPythonを記述してください。光が見えるまで勉強を続けてから、それらをデザインに取り入れ始めます。

于 2013-03-10T13:24:27.250 に答える