I am confronted to a python problem. I want to use type()
to find out what type of variable I am using. The code looks similar to this one:
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()
Edit: myField() is a class I defined.
When I ask for the type() I get: <type 'instance'>
Now according to 1 this is due to the fact that I use a class element and ask for type()
on that. Now what I need is: <type 'int'>
for the example: myField(42)
and <type 'str'>
for myField(foo)
. How could I acheive that?
EDIT:
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 = []
The code is taken from scapy and I try to adapt it.
in python 2, all of your classes should inherit from object
. If you don't, you end up with "old style classes", which are always of type classobj
, and whose instances are always of type instance
.
>>> class myField():
... pass
...
>>> class yourField(object):
... pass
...
>>> m = myField()
>>> y = yourField()
>>> type(m)
<type 'instance'>
>>> type(y)
<class '__main__.yourField'>
>>>
If you need to check the type of an old-style class, you can use its __class__
attribute, or even better, use isinstance()
:
>>> m.__class__
<class __main__.myField at 0xb9cef0>
>>> m.__class__ == myField
True
>>> isinstance(m, myField)
True
But... you want to know the type of the argument passed to your class constructor? well, that's a bit out of python's hands. You'll have to know just what your class does with it's arguments.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With