繁体   English   中英

python:使用列表调用实例属性

[英]python: using list to call instance attribute

我正在尝试为类实例使用列表中的元素。 我不确定是否使用了正确的术语,因为我是python的新手,但这是代码中的示例:

list = ['one', 'two', 'three']

class numbers:
    def __init__(self, letter):
        self.letter = letter

one = numbers('a')

我正在尝试使用该列表执行以下操作:

print(list[0].letter)

这似乎不起作用,因为list [0]是一个字符串。 有没有解决的办法? 提前致谢。

在您的列表中,创建3个字符串:

list = ['one', 'two', 'three']

然后创建一个数字类型的对象:

one = numbers('a')

此新对象不属于您的列表。 因此,当您访问list[0]您将获得字符串'one'

您需要先创建对象,然后再将它们添加到列表中,然后再创建列表。

one = numbers('a')
two = numbers('b')
list_ = [one, two]
list_[0].letter
'a'

令人困惑的部分是字符串'one'并且one变量的对象引用不是同一回事。 后者是一个对象,并且具有letter属性。 前者只是一个字符串。

您真的不想做您想要的。 内德·巴切尔德(Ned Batchelder)对此有很好的解释 我没有一个很棒的人

但是,如果您已经阅读了这些书,并且确信自己确实确实有一些罕见的事情确实是对的,那么按名称查找全局变量的方法就是使用globals函数来获取将全局名称空间作为字典,然后在其中查找:

>>> lst = ['one', 'two', 'three']
>>> one = numbers('a')
>>> globals()[lst[0]].letter
'a'

请注意,如果您刚开始创建并使用字典,则可以更轻松,更易读。

>>> dct = {'one': numbers('a'), 'two': numbers('b'), 'three': numbers('c')}
>>> dct['one'].letter
'a'
>>> dct[lst[0]].letter
'a'

而且,除了更具可读性和更明确的含义外,它还更加强大,因为您可以构建所需的任何字典,而不仅仅是globals具有的任何字典。 您甚至可以一口气将字典和数字一起构建:

>>> numbers = (numbers(letter) for letter in string.ascii_lowercase)
>>> dct = dict(zip(lst, numbers))

像这样?

one = numbers('a')
two = numbers('b')
three = numbers('c')
list = [one, two, three]

结果如下。

>>> print(list[0].letter)
a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM