【问题标题】:Using Objects In Dictionaries在字典中使用对象
【发布时间】:2021-03-29 16:26:25
【问题描述】:

在这个(测试)代码中:

class Test(object):
  def __init__(self,val):
    self.val=val
  def returnVal(self):
    return(self.val)

dict = {}
dict["Tom"] = Test(20)

如何让 Tom 使用“returnVal”功能。由于 Tom.returnVal() 似乎不起作用。 (对不起,如果这是一个愚蠢的问题,这是我第一次使用字典作为对象。

【问题讨论】:

  • 你也可以dict.get("Tom").returnVal()。你的问题也很好,但我可以告诉你,有些人可能不喜欢它并可能在未来投反对票:)

标签: python dictionary object


【解决方案1】:

也许你应该稍微改变一下代码

class Test(object):

  def __init__(self,val):
    self.val=val
  def returnVal(self):
    return self.val   # return not only print

dict = {}
dict["Tom"] = Test(20)

Tom 不是一个对象,它是字典的一个键。所以你应该这样编码:

dict["Tom"].returnVal()

【讨论】:

    【解决方案2】:

    您使用键值从字典中选择元素,就像您分配它时所做的那样。

    dict["Tom"].returnVal()

    【讨论】:

      【解决方案3】:

      实际上,您还可以了解更多与您的帖子相关的内容。

      首先,从 Python 3.x 开始,您不需要从 object 子类化您的类。它是自动的。见this thread here(包括一些相关的cmets)。

      所以你可能可以这样做:

      class Test:
        def __init__(self,value):
          self.value = value
      
        def value(self):
          return self.value
      

      如果你真的想要方法value,你可以考虑。在 Python 中,如果您只需要读取一个属性值(无需额外处理、无需访问控制、什么都没有),则不需要 getter 方法。直接从实例访问属性将:

      obj = Test(42)
      value = obj.value 
      

      另外,Python 中方法和函数的命名风格应为snake_case,类名应为CamelCase。其他样式见PEP8

      更重要的是,不要分配给内置名称,例如dictlist

      # do not do this
      dict = {}
      dict["Tom"] = Test(20)
      

      要查看应避免使用的其他名称,请在 Python shell 中执行:

      >>> import builtins
      >>> dir(builtins)
      

      这是因为你替换了内置定义,在后面的代码中你会感到困惑。在您上面的代码中,dict 从现在开始是一个特定的字典实例对象,使用dict() 创建一个新字典将失败。

      也许你只是想用

      创建一个对象
      tom = Test(20)
      print(tom.value)
      

      或者将测试对象(或任何类型的对象)存储在字典中:

      people = {}
      people["Tom"] = Test(20)
      print(people["Tom"].value)
      print("Tom" in people)
      

      【讨论】:

        猜你喜欢
        • 2011-10-13
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多