在字典中使用对象

2024-10-01 04:44:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在此(测试)代码中:

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()所示,它似乎不起作用。(很抱歉,如果这是一个愚蠢的问题,这是我第一次使用字典处理对象


Tags: 对象代码testself功能return字典object
3条回答

您可以使用键值从字典中选择元素,就像分配元素时一样

dict["Tom"].returnVal()

也许你应该把密码改一下

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的一个键。所以你应该这样编码:

dict["Tom"].returnVal()

实际上,在你的帖子中,你还可以学到一些与之相关的东西

首先,由于Python3.x,您不需要从object对类进行子类化。它是自动的。见this thread here(包括一些相关评论)

因此,您可能可以:

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

  def value(self):
    return self.value

如果你真的想要方法^ {< CD2>},可以考虑。在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是从现在开始在一个特定的dictionary实例对象上,使用dict()创建一个新的dictionary将失败

也许您只是想创建一个具有

tom = Test(20)
print(tom.value)

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

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

相关问题 更多 >