为什么`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