2015-04-12 1 views
-2

Je souhaite renvoyer une valeur de dictionnaire lors de l'appel de l'objet.Valeurs de dictionnaire de retour init python class

class card: 
    foo={2:0} 
def __init__(self,num): 
    self._num=card.foo[num] 

quand je fais

bar=card(2) 
bar 

retourne

<__main__.Card at 0x7f5d60440588> 

comment puis-je pour revenir 0?

+2

semble étrange. Quel est ton but? –

+0

Vous devriez utiliser 'get' pour garantir une valeur. –

+0

@MalikBrahimi parfois un 'KeyError' est le bon résultat! – jonrsharpe

Répondre

0

Vous devez étendre la __repr__ méthode spéciale:

class Card: 
    foo = {2: 0} 

    def __init__(self,num): 
     self._num = Card.foo.get(num) 

    def __repr__(self): 
     return str(self._num) 
0

Vous n'avez pas accédé à _num attribut de bar .Vous devez bar._num:

>>> class card: 
...  foo={2:0} 
...  def __init__(self,num): 
...  self._num=card.foo[num] 
... 
>>> bar=card(2) 
>>> bar 
<__main__.card instance at 0x7fa9d7f9c098> 
>>> bar._num 
0 

Attribute references utiliser la syntaxe standard utilisée pour toutes les références d'attribut en Python: obj.name. Les noms d'attribut valides sont tous les noms qui se trouvaient dans l'espace de noms de la classe lors de la création de l'objet de classe.

0

Il ne faut pas commenter, je modifier une seule ligne en réponse par @Malik Brahimi (__repr__ et __str__ doit retourner la chaîne, pas le numéro):

class Card: 
    foo = {2: 0} 

    def __init__(self,num): 
     self._num = Card.foo.get(num) 

    def __repr__(self): 
     return str(self._num) 
+0

Ce n'est même pas vrai, pourquoi devrions-nous retourner un nombre comme une chaîne? –

+0

@Malik Brahimi: [__repr__()] (https://docs.python.org/2/reference/datamodel.html#object.__repr__) dit ** La valeur de retour doit être un objet chaîne ** – EKomarov

+0

Oh, oui . Désolé si j'ai oublié ça. Veuillez marquer ma solution comme réponse si vous le pouvez. –