0

我有一个类型的类实例<class 'openstack_dashboard.api.nova.Server'>

 >>>print instance
 >>><Server: {'id': u'9fa3b2e9-a76b-44ae-be75-968d4010eb27', 
              'links': [{u'href': u'http://10.0.3.129:8774/v2/344f7fa036fc45008130cdf1cffac019/servers/9fa3b2e9-a76b-44ae-be75-968d4010eb27', u'rel': u'self'}, 
                        {u'href': u'http://10.0.3.129:8774/344f7fa036fc45008130cdf1cffac019/servers/9fa3b2e9-a76b-44ae-be75-968d4010eb27', u'rel': u'bookmark'}]}>
 >>> print dir(instance)
 >>> ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', 
      '__getattr__', '__getattribute__', '__hash__', '__init__', 
      '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
      '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
      '__weakref__', '_apiresource', '_attrs', 'image_name', 
      'internal_name', 'request']

我想得到'id''9fa3b2e9-a76b-44ae-be75-968d4010eb27')。我应该怎么办 ?谢谢 !

4

3 回答 3

2

根据我在源代码中看到的内容,Server继承自公共APIResourceWrapper,后者又实现__gatattr__id,虽然它不完全是对象自己的属性,但将从内部容器中获取self._apiresource

因此,instance.id将起作用并将有效地返回instance._apiresource.id

于 2014-01-09T08:52:00.077 回答
1

openstack_dashboard.api.nova.Server继承自openstack_dashboard.api.base.APIResourceWrapper并且此类定义__getattr__()了使用的方法self._attrs,因此我认为应该可以以id这种方式阅读:

print(instance.id)
于 2014-01-09T08:54:19.453 回答
0

这现在可能对您有用,但它依赖于实现:

import re
printed = instance.__str__() #might also be __repr__()
m = re.search("'id'\s*:\s*u'([\w+\-]+)'", printed)
m.groups(0)[0] #returns 9fa3b2e9-a76b-44ae-be75-968d4010eb27
于 2014-01-09T08:58:02.247 回答