为什么`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 'instance'>现在根据1这是因为我使用一个类元素,并要求type()的事实。 现在我需要的是: <type 'int'> myField(42) <type 'int'>例如: myField(42)<type 'str'> myField(foo) <type 'str'> for 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 = []

代码取自scapy,我尝试修改它。


在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'>
>>> 

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

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

但是...你想知道传递给你的类构造函数的参数的类型吗? 那么,这是蟒蛇手中的一点点。 你必须知道你的班级是如何处理这些争论的。


您正在将myField实例放入数组中。 这就是为什么类型是实例。 如果你想获得int或str类型,你将需要访问myField实例中的那个字段。

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

然后我将成为你的myField,你应该可以通过访问器访问int或str。

链接地址: http://www.djcxy.com/p/6995.html

上一篇: Why does `type(myField)` return `<type 'instance'>` and not `<type 'Field'>`?

下一篇: Parse date and time from string with time zone using Arrow