python: Class error __main__.foo-Instanz auf 0 x
Ich Lerne python (mit VBA im hintergrund) durch den Bau eines black-jack-Spiel (ja, ich habe gefragt, eine Reihe von Fragen über blackjack als ein Beispiel).
Hier ist mein code:
import random
class DECK():
def load_deck(self):
suite = ('Spades', 'Hearts', 'Diamonds', 'Clubs')
rank = ('2', '3', '4', '5', '6', '7', '8', '9', '10', "Jack", "Queen", "King", "Ace")
full_deck = {}
i = 0
for s in suite:
for r in rank:
full_deck[i] = "%s of %s" % (r, s)
i += 1
return full_deck
def pick_item(self, deck):
card_key = random.choice(deck.keys())
new_card = deck[card_key]
del deck[card_key]
return (deck, new_card)
def missing_card(self, deck):
temp_deck = DECK()
print temp_deck
d1 = DECK()
deck1 = d1.load_deck()
deck1, card1 = d1.pick_item(deck1)
print card1
d1.missing_card(d1)
Hier ist, was ich in das terminal (Datei-namehand_c.py
):
$ python hand_c.py
Ace of Clubs
<__main__.DECK instance at 0x10bb0d248>
$
Warum hat der eine Funktion der Arbeit pick_item
, aber nicht die anderen missing_card
?
Pro die erste Antwort, ich habe die Funktion definition:
def missing_card(self, deck):
deckC1 = DECK()
temp_deck = deckC1.load_deck
print temp_deck
Aber jetzt bekomme ich die folgende aus dem terminal:
$ python hand_c.py
Jack of Diamonds
<bound method DECK.load_deck of <__main__.DECK instance at 0x10500e248>>
$
- Was meinst du mit "arbeiten"? Was erwarten Sie
missing_card
zu tun? - In der Nähe von Begriff, ich hatte gehofft, es würde drucken Sie das Wörterbuch. Schließlich möchte ich Sie zu finden, die fehlende Karten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich geändert, Ihr Programm zu arbeiten. Ich stellte einen Konstruktor und verändert die Darstellung von deinem deck auf eine Liste statt ein Wörterbuch, und es wird eine Instanz-variable, gehört zu den deck-erstellen Sie in der Zeile
d1 = DECK()
. Jede Methode in der Klasse hat jetzt Zugang zu deinem deck, ohne Offenlegung Ihrer internen Darstellung der deck, um die Welt, und Sie haben nur die Arbeit mit der one-DECK-Objekt.Sollten Sie gehen durch das Python-tutorial. Dein code hat viele Probleme. Die meisten im Grunde, Sie sind mit der Klasse einfach nur eine Tasche, die halten-Funktionen, ohne tatsächlich halten die deck-Daten als Teil der Klasse-Instanz. Das ist, kehren Sie das deck wie ein Wörterbuch, dann gehen Sie zurück in einer anderen Funktion. Es wäre besser, speichern Sie das deck in einem Attribut (z.B.
self.deck
) und andere Funktionen verwenden.Jedenfalls, der Grund, warum es nicht druckt das Wörterbuch ist ganz einfach. Sie tun dies:
So erstellen Sie eine variable
temp_deck
und legen Sie es gleich auf eine neue Instanz der Klasse DECK. Dann drucken Sie es. Gut, natürlich wird er nicht drucken, ein Wörterbuch.temp_deck
ist nicht ein Wörterbuch. Es ist ein DECK-Objekt. Wenn Sie möchten, dass das Wörterbuch mit deinen aktuellen code, die Sie brauchen würden fürtemp_deck.load_deck()
genau wie Sie nicht mit Ihrer original-deck, und drucken Sie dann das Ergebnis.