Python 如何使用名称中带有冒号的属性

Python 如何使用名称中带有冒号的属性,python,attributes,Python,Attributes,当对象属性的名称中有冒号时,如何使用该属性?我遇到这种情况的代码是: instances = nova.servers.list() for i in instances: print i.id, i.OS-EXT-SRV-ATTR:hypervisor_hostname 在查看链接和 我试着使用attr作为 instances = nova.servers.list() for i in instances: print i.id, i.(attr={"OS-

当对象属性的名称中有冒号时,如何使用该属性?我遇到这种情况的代码是:

instances = nova.servers.list()
for i in instances:
        print i.id, i.OS-EXT-SRV-ATTR:hypervisor_hostname
在查看链接和 我试着使用attr作为

instances = nova.servers.list()
for i in instances:
        print i.id, i.(attr={"OS-EXT-SRV-ATTR":"hypervisor_hostname"})

但它给出的错误是无效语法。如何使用属性OS-EXT-SRV-ATTR:hypervisor_hostname

不要使用具有此类名称的属性的对象。使用口述

可以使用无效的Python名称设置和获取属性:

Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 

>>> class A():
...     pass
... 

>>> a = A()

>>> setattr(a, 'OS-EXT-SRV-ATTR:hypervisor_hostname', 'some_string')

>>> a.OS-EXT-SRV-ATTR:hypervisor_hostname
  File "<ipython-input-5-849986a021bc>", line 1
    a.OS-EXT-SRV-ATTR:hypervisor_hostname
                     ^
SyntaxError: invalid syntax


>>> getattr(a, 'OS-EXT-SRV-ATTR:hypervisor_hostname')
>>> 'some_string'

>>> 
Python 2.7.5+(默认,2013年9月19日,13:48:49)
>>>类别A():
...     通过
... 
>>>a=a()
>>>setattr(一个“OS-EXT-SRV-ATTR:hypervisor_hostname”,“some_string”)
>>>a.OS-EXT-SRV-ATTR:hypervisor_主机名
文件“”,第1行
a、 OS-EXT-SRV-ATTR:hypervisor_主机名
^
SyntaxError:无效语法
>>>getattr(一个“OS-EXT-SRV-ATTR:hypervisor_主机名”)
>>>“一些线”
>>> 
但不要这样做,使用dict来存储此信息,而不是对象的属性。

With)并使用

另见

你为什么要这样做?我发现自己的处境是,我需要在自己的类中包装一个AWS Cognito用户字段,而不是一个dict

        for attr in admin_get_user_dict['UserAttributes']:
            setattr(cognito_user, attr['Name'], attr['Value'])

在Cognito中,自定义属性的前缀是custom:[your\u attr\u name],因此就有了它。是的,如果您正在设计自己的类,您希望不惜任何代价避免这种情况。

您是如何使用这样的名称设置属性的?我很好奇您为什么要这样做。谢谢您的回答。我用dict。