Python 类型 '实例' 转换

1 投票
2 回答
7535 浏览
提问于 2025-04-17 11:01

我正在使用一个内置的SNMP库来从服务器获取一些数据。现在,当我获取到这些数据时,它以列表的形式显示为:

.>>> [ObjectName(1.2.6.1.4.1.111.1.4.1.7), Integer(21)]

当我打印出 x[0](假设x就是这个响应)时,我看到的内容是1.2.6.1.4.1.111.1.4.1.7,而 x[1] 的值是21。但是当我执行 type(x[0]) 时,得到的结果是 <type 'instance'>

我现在的问题是,有没有办法找到 x[1] 的类型,并将其转换成那种类型?(x[0]总是一个字符串,但 x[1] 可能是整数、字符串或浮点数等。)

有没有办法读取这个“Integer”(在这个例子中)?

谢谢

编辑:

我觉得我没有描述清楚。我其实并不关心 x[0],我想把 x[1] 转换成它本来的类型,而不想修改我获取SNMP数据的那个类。这个例子中它是一个 int,但它也可能是浮点数或字符串。我想找一种方法来确定这个实例的类型,然后将其转换成那种类型。

2 个回答

0

对象是什么,以及当你打印这个对象时显示的内容,实际上并不一定有关系。

举个例子:

>>> class Foo:
...     def __str__(self):
...         return 'my personal string'
>>>
>>> f = Foo()
>>> type(f)
<class '__main__.Foo'>
>>> print(f)
my personal string

所以如果你想知道 x[1] 的类型,你需要调用 type(x[1])

如果你想把 x[0] 转换成和 x[1] 一样的类型,可以使用:

x = [ObjectName(1.2.6.1.4.1.111.1.4.1.7), Integer(21)]
converted = type(x[1])(x[0])

不过这是否能成功,取决于 x[0]x[1] 实际上是什么。

1

你看到 <type 'instance'> 是因为这个库使用的是旧式类。你可以通过 x.__class__ 来获取类的名称。在你的例子中,x[0].__class__.__name__ 会返回 ObjectName

撰写回答