在 python 中打印 class 对象
Printing the class object in python
我正在修改 Openstack Designate 中的代码。
同时我需要打印一些数据。
当我检查相同的类型时,它返回了如下详细信息:
<class 'designate.openstack.common.rpc.amqp.RpcContext'>
当我尝试记录相同的内容(用于打印)时,它返回的详细信息如下:
<designate.openstack.common.rpc.amqp.RpcContext object at 0x7f7552b08250>
我知道它包含 tenant_id,所以当我尝试打印它时它工作正常。
LOG.info(context.tenant_id)
现在我需要知道或看看里面有什么:
<designate.openstack.common.rpc.amqp.RpcContext object at 0x7f7552b08250>
里面就是'context'.
我需要的只是打印位于 'context'
中的详细信息
__repr__
是对象的 "official" 字符串表示形式
__str__
是对象的 "informal" 字符串表示形式
您可以在 class 中覆盖这两个函数。
有关详细信息,请阅读 Difference between __str__ and __repr__ in Python
在你的情况下你可以这样写:
def __str__(self):
return '%d' % self.tenant_id
也许你可以使用这个小技巧:
def info_obj(a):
for x in dir(a):
if not x.startswith('_'):
print(x, ,'=', a.__getattribute__(x))
dir(a)
会return对象所有属性的名字,__getattribute__
会得到它的值。我跳过了以 _
开头的那些,因为对象的用户通常看不到这些。
应在 openstack/oslo-incubator 中更改与 oslo-incubator 相关的任何内容,然后同步到指定项目
但是,大部分代码已经从oslo-incubator毕业,oslo-incubator中的rpc模块似乎已经不存在了,看来你是基于(旧的)稳定分支开发的
所以我想您只需要找出其中的内容即可。
正如您已经为 tenant_id 所做的那样,只需添加要打印的日志:
LOG.info('attr=%s, content=%s', dir(context), context.__dict__)
没问题
我正在修改 Openstack Designate 中的代码。
同时我需要打印一些数据。
当我检查相同的类型时,它返回了如下详细信息:
<class 'designate.openstack.common.rpc.amqp.RpcContext'>
当我尝试记录相同的内容(用于打印)时,它返回的详细信息如下:
<designate.openstack.common.rpc.amqp.RpcContext object at 0x7f7552b08250>
我知道它包含 tenant_id,所以当我尝试打印它时它工作正常。
LOG.info(context.tenant_id)
现在我需要知道或看看里面有什么:
<designate.openstack.common.rpc.amqp.RpcContext object at 0x7f7552b08250>
里面就是'context'.
我需要的只是打印位于 'context'
中的详细信息__repr__
是对象的 "official" 字符串表示形式
__str__
是对象的 "informal" 字符串表示形式
您可以在 class 中覆盖这两个函数。
有关详细信息,请阅读 Difference between __str__ and __repr__ in Python
在你的情况下你可以这样写:
def __str__(self):
return '%d' % self.tenant_id
也许你可以使用这个小技巧:
def info_obj(a):
for x in dir(a):
if not x.startswith('_'):
print(x, ,'=', a.__getattribute__(x))
dir(a)
会return对象所有属性的名字,__getattribute__
会得到它的值。我跳过了以 _
开头的那些,因为对象的用户通常看不到这些。
应在 openstack/oslo-incubator 中更改与 oslo-incubator 相关的任何内容,然后同步到指定项目
但是,大部分代码已经从oslo-incubator毕业,oslo-incubator中的rpc模块似乎已经不存在了,看来你是基于(旧的)稳定分支开发的
所以我想您只需要找出其中的内容即可。
正如您已经为 tenant_id 所做的那样,只需添加要打印的日志:
LOG.info('attr=%s, content=%s', dir(context), context.__dict__)
没问题