我遇到了一个python问题.我想用来type()
找出我正在使用的变量类型.代码看起来与此类似:
class Foo():
array=[ myField(23),myField(42),myField("foo"), myField("bar")]
def returnArr(self):
for i in self.array:
print type(i)
if __name__ == "__main__":
a=Foo()
a.returnArr()
Run Code Online (Sandbox Code Playgroud)
编辑:myField()是我定义的类.
当我要求type()时,我得到: <type 'instance'>
现在根据1,这是因为我使用了一个类元素并要求type()
它.现在,我需要的是:<type 'int'>
对于例如:myField(42)
与<type 'str'>
对myField(foo)
.我怎么能实现这一点?
编辑:
def __init__(self, name, default, fmt="H"):
self.name = name
if fmt[0] in "@=<>!":
self.fmt = fmt
else:
self.fmt = "!"+fmt
self.default = self.any2i(None,default)
self.sz = struct.calcsize(self.fmt)
self.owners = []
Run Code Online (Sandbox Code Playgroud)
代码取自scapy,我尝试调整它.
Sin*_*ion 92
在python 2中,所有类都应继承自object
.如果不这样做,最终会得到"旧样式类",它们总是类型classobj
,并且其实例始终是类型instance
.
>>> class myField():
... pass
...
>>> class yourField(object):
... pass
...
>>> m = myField()
>>> y = yourField()
>>> type(m)
<type 'instance'>
>>> type(y)
<class '__main__.yourField'>
>>>
Run Code Online (Sandbox Code Playgroud)
如果需要检查旧式类的类型,可以使用其__class__
属性,甚至更好,使用isinstance()
:
>>> m.__class__
<class __main__.myField at 0xb9cef0>
>>> m.__class__ == myField
True
>>> isinstance(m, myField)
True
Run Code Online (Sandbox Code Playgroud)
但是......你想知道传递给类构造函数的参数的类型吗?嗯,这有点脱离了蟒蛇的手.你必须知道你的课对它的论点做了什么.
您正在将 myField 实例放入数组中。这就是为什么类型是实例。如果您想获取 int 或 str 类型,您将需要访问 myField 实例中的该字段。
def returnArr(self):
for i in self.array:
print type(i.accessor)
Run Code Online (Sandbox Code Playgroud)
然后,我将成为您的 myField,您应该能够使用访问器访问 int 或 str。