Python 类型 '实例' 转换
我正在使用一个内置的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
。