python:为什么type(myField)返回type instance而不是type Field?

我遇到了一个python问题。我想使用type()来找出我使用的变量类型。代码看起来像这样:

1
2
3
4
5
6
7
8
9
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()

Edit: myField()是我定义的一个类。

当我请求类型()时,我得到:现在根据1,这是由于我使用了一个类元素,并在上面请求type()。现在我需要的是:用于示例:myField(42)用于myField(foo)。我怎么能受得了呢?

编辑:

1
2
3
4
5
6
7
8
9
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 = []

代码取自scapy,我试图对其进行调整。


在python2中,所有的类都应该继承自object。如果不这样做,就会得到"旧式类",它们总是类型为classobj,并且它们的实例总是类型为instance

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> class myField():
...     pass
...
>>> class yourField(object):
...     pass
...
>>> m = myField()
>>> y = yourField()
>>> type(m)
<type 'instance'>
>>> type(y)
<class '__main__.yourField'>
>>>

如果需要检查旧式类的类型,可以使用它的__class__属性,或者更好的方法是使用isinstance():

1
2
3
4
5
6
>>> m.__class__
<class __main__.myField at 0xb9cef0>
>>> m.__class__ == myField
True
>>> isinstance(m, myField)
True

但是…您想知道传递给类构造函数的参数的类型吗?这有点超出了python的能力范围。你必须知道你的类是如何处理它的参数的。


将myField实例放入数组中。这就是为什么类型是instance。如果希望获得int或str类型,则需要访问myField实例中的该字段。

1
2
3
def returnArr(self):
   for i in self.array:
       print type(i.accessor)

然后我将是您的myField,您应该能够使用访问器访问int或str。