繁体   English   中英

为什么`type(myField)`返回`<type 'instance'> `而不是`<type 'field'> `?</type></type>

[英]Why does `type(myField)` return `<type 'instance'>` and not `<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() 是我定义的 class 。

当我要求 type() 时,我得到: <type 'instance'>现在根据1 ,这是因为我使用了 class 元素并要求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 = []

代码取自 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 的类型,您可以使用它的__class__属性,或者更好的是,使用isinstance()

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

但是...您想知道传递给 class 构造函数的参数类型吗? 好吧,这有点超出了python的掌控。 您必须知道 class 与 arguments 的作用。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM