在python中打印类对象

2024-06-10 06:33:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在修改Openstack中的代码。你知道吗

同时我需要打印一些数据。你知道吗

当我检查相同的类型时,它返回如下详细信息:

<class 'designate.openstack.common.rpc.amqp.RpcContext'>

当我尝试记录相同的内容(用于打印)时,它返回的详细信息如下:

<designate.openstack.common.rpc.amqp.RpcContext object at 0x7f7552b08250>

我知道它包含租户id,所以当我试图打印相同的工作正常。你知道吗

LOG.info(context.tenant_id)

现在我需要知道或看看里面是什么:

<designate.openstack.common.rpc.amqp.RpcContext object at 0x7f7552b08250>

在“上下文”中。你知道吗

我需要的只是打印“上下文”中的细节


Tags: 数据代码id类型amqpopenstackobject详细信息
3条回答

阅读^{}^{}

__repr__是对象的“官方”字符串表示形式

__str__是对象的“非正式”字符串表示

您可以在一个类中覆盖这两个函数。你知道吗

更多信息请阅读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)将返回对象的所有属性的名称,__getattribute__将获取其值。我跳过了以_开头的那些,因为它们通常不会被对象的用户看到。你知道吗

任何与奥斯陆孵化器相关的内容都应该在openstack/oslo孵化器中进行更改,然后同步指定项目

但是,大部分代码都是从osloincubator毕业的,osloincubator中的rpc模块似乎已经不存在了,所以看起来您是在(旧的)稳定分支的基础上开发的

所以我想你只需要找出里面有什么。你知道吗

正如您对租户id所做的那样,只需添加一个要打印的日志:

LOG.info('attr=%s, content=%s', dir(context), context.__dict__) 

那就好了

相关问题 更多 >