gpt4 book ai didi

python - 为什么 `type(myField)` 返回 `` and not ` `?

转载 作者:IT老高 更新时间:2023-10-28 21:34:29 25 4
gpt4 key购买 nike

我遇到了一个 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这是因为我使用了一个类元素并要求 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__属性,或者更好的是,使用isinstance():

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

但是...您想知道传递给您的类构造函数的 参数 的类型吗?好吧,这有点超出了python的掌控。你必须知道你的类(class)对它的论点做了什么。

关于python - 为什么 `type(myField)` 返回 `<type ' 实例' >` and not ` <type 'Field' >`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com