在 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__ and __str__

__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__) 

没问题