【问题标题】:python class init return dictionary valuespython类初始化返回字典值
【发布时间】:2015-04-12 19:32:18
【问题描述】:

我想在调用对象时返回一个字典值。

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

当我这样做时

bar=card(2)
bar

返回

<__main__.Card at 0x7f5d60440588>

如何让它返回 0?

【问题讨论】:

  • 看起来很奇怪。你的目标是什么?
  • 您应该使用get 来确保值。
  • @MalikBrahimi 有时KeyError 是正确的结果!

标签: python class dictionary


【解决方案1】:

不允许评论,所以我只编辑了@Malik Brahimi 的回复中的一行(__repr____str__ 应该返回字符串,而不是数字):

class Card:
    foo = {2: 0}

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

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

【讨论】:

  • 这甚至不是真的,我们为什么要返回一个数字作为字符串?
  • @Malik Brahimi: __repr__()返回值必须是字符串对象
  • 哦,是的。对不起,如果我忘记了。如果可以,请将我的解决方案标记为答案。
【解决方案2】:

你必须扩展__repr__这个特殊方法:

class Card:
    foo = {2: 0}

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

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

【讨论】:

    【解决方案3】:

    您没有访问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。有效的属性名称是创建类对象时类名称空间中的所有名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 2012-04-27
      • 2017-11-15
      • 1970-01-01
      • 2018-07-14
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多