我正在尝试在列表中使用类实例的元素。我不确定我是否使用了正确的术语,因为我是python的新手,但这是代码中的一个例子:
list = ['one', 'two', 'three']
class numbers:
def __init__(self, letter):
self.letter = letter
one = numbers('a')
我正在尝试使用列表执行以下操作:
print(list[0].letter)
这似乎不起作用,因为list [0]是一个字符串。有工作吗?提前谢谢。
答案 0 :(得分:2)
在列表中创建3个字符串:
list = ['one', 'two', 'three']
然后创建一个类型为number的对象:
one = numbers('a')
此新对象不属于您的列表。因此,当您访问list[0]
时,您将返回字符串'one'
您需要在将对象添加到列表之前创建对象,然后创建列表。
one = numbers('a')
two = numbers('b')
list_ = [one, two]
list_[0].letter
'a'
您感到困惑的部分是字符串'one'
,one
变量的对象引用不是同一个东西。后者是一个对象,它具有letter属性。前者只是一个字符串。
答案 1 :(得分:1)
你真的不想做你要求的事情。 Ned Batchelder有a great explanation of why。我有a not as great one。
但是,如果您已经阅读了这些内容,并且您确信您确实拥有其中一个非常正确的事情,那么按名称查找全局变量的方法是使用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
。你甚至可以一举建立dict和数字:
>>> numbers = (numbers(letter) for letter in string.ascii_lowercase)
>>> dct = dict(zip(lst, numbers))
答案 2 :(得分:-1)
喜欢这个吗?
one = numbers('a')
two = numbers('b')
three = numbers('c')
list = [one, two, three]
结果如下。
>>> print(list[0].letter)
a