Python类型'实例'转换

时间:2012-01-25 00:16:45

标签: python

我正在使用内置的SNMP库从服务器获取一些数据。现在当我把它拿回来时,它会在列表中显示为

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

当我打印出x[0](假装x是响应^)时,我看到x[1]的1.2.6.1.4.1.111.1.4.1.7和21,但是当我type(x[0])时我得到<type 'instance'>

现在我的问题是,是否有办法找到x[1]的类型并将其转换为该类型? (x[0]将始终为字符串,但x[1]可以是整数,字符串或浮点数等。

有没有办法读取“整数”(在这种情况下)?

由于

编辑:

我不认为我清楚地描述了它。我真的非常关心x[0],我想将x[1]转换为它,而不是从我从中获取SNMP数据的类中修改任何内容。在这个例子中它是一个int,但它可以是一个浮点数或一个字符串。我正在寻找一种方法来确定该实例的类型,然后将其转换为

2 个答案:

答案 0 :(得分:1)

您获得<type 'instance'>,因为该库正在使用old-style classes。您可以使用x.__class__获取班级名称。在您的示例中,x[0].__class__.__name__将是ObjectName

答案 1 :(得分: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 = [ObjectName(1.2.6.1.4.1.111.1.4.1.7), Integer(21)]
converted = type(x[1])(x[0])

即使它能够运作取决于x[0]x[1]到底是什么。