python-为什么type(myField)返回的是<type'instance'>>而不返回<type'Field'>>?

我遇到了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()

编辑:myField()是我定义的类。

当我要求type()时,我得到:<type 'instance'>现在根据1的原因是由于我使用了class元素并要求提供type()。 现在,我需要的是:<type 'int'>,例如:myField(42)<type 'str'> formyField(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 = []

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

Steve asked 2020-08-12T05:32:23Z
2个解决方案
90 votes

在python 2中,您所有的类都应继承自__class__

>>> class myField():
...     pass
... 
>>> class yourField(object):
...     pass
... 
>>> m = myField()
>>> y = yourField()
>>> type(m)
<type 'instance'>
>>> type(y)
<class '__main__.yourField'>
>>> 

如果您需要检查老式类的类型,则可以使用其__class__属性,或者甚至更好,可以使用isinstance()

>>> m.__class__
<class __main__.myField at 0xb9cef0>
>>> m.__class__ == myField
True
>>> isinstance(m, myField)
True

但是...您想知道传递给类构造函数的参数类型吗? 好吧,这有点超出了Python的控制。 您将必须知道您的类使用其参数做什么。

SingleNegationElimination answered 2020-08-12T05:32:39Z
0 votes

您正在将myField实例放入数组中。 这就是为什么类型是实例的原因。 如果要获取int或str类型,则需要在myField实例中访问该字段。

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

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

J Lundberg answered 2020-08-12T05:33:05Z
translate from https://stackoverflow.com:/questions/6666856/why-does-typemyfield-return-type-instance-and-not-type-field