![](/img/trans.png)
[英]Proper way to call the instance attribute of the parent class using super in 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.