2015-04-12 37 views
-2

我想在調用對象時返回字典值。python class init返回字典值

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

當我做

bar=card(2) 
bar 

返回

<__main__.Card at 0x7f5d60440588> 

我怎麼得到它返回0?

+2

似乎很奇怪。你的目標是什麼? –

+0

你應該使用'get'來確保一個值。 –

+0

@MalikBrahimi有時候'KeyError'是正確的結果! – jonrsharpe

回答

0

您必須擴展__repr__特殊方法:

class Card: 
    foo = {2: 0} 

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

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

你沒有訪問到的bar_num屬性。你需要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使用使用的標準語法對於Python中的所有屬性引用:obj.name。有效的屬性名稱是在創建類對象時位於類名稱空間中的所有名稱。

0

不允許發表評論,所以我通過@Malik卜拉希米(__repr____str__應該返回字符串,而不是數字)編輯答案只有一條線路:

class Card: 
    foo = {2: 0} 

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

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

這不是真的,我們爲什麼要返回一個數字作爲一個字符串? –

+0

@Malik Brahimi:[__repr__()](https://docs.python.org/2/reference/datamodel.html#object.__repr__)說**返回值必須是字符串對象** – EKomarov

+0

哦,是的。對不起,如果我忘記了。如果可以,請將我的解決方案標記爲答案。 –