我正在使用内置的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
,但它可以是一个浮点数或一个字符串。我正在寻找一种方法来确定该实例的类型,然后将其转换为
答案 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]
到底是什么。