Python语言是一种弱类型的动态语言,很多时候使用过程中不知道某个对象或者变量的类型,但是由于其具备有强大的自省功能,因此可以依据其自省来获取该对象或者变量的很多信息
代码:
#!/usr/bin/env python def interrogate(var): print 'ID: ', id(var) print 'Type: ', type(var) print 'Value: ', repr(var) if hasattr(var,'__name__'): print 'NAME: ', var.__name__ if hasattr(var,'__class__'): print 'CLASS: ', var.__class__ if hasattr(var,'__doc__'): print 'DOC: ', var.__doc__ members = dir(var) print 'Methods for ', var for item in members: if callable(getattr(var,item)): print '\t\t',item if isinstance(var,object): print var, ' is instance of type object' if hasattr(var,'__class__'): if issubclass(var.__class__, str): print 'is subclass of str' else: print 'Not subclass of str' print ' ' print '************************************' if __name__ == '__main__': interrogate(1) interrogate((1,)) interrogate([1]) interrogate('hello')
运行结果:
ID: 41638144 Type: <type 'int'> Value: 1 CLASS: <type 'int'> DOC: int(x[, base]) -> integer Convert a string or number to an integer, if possible. A floating point argument will be truncated towards zero (this does not include a string representation of a floating point number!) When converting a string, use the optional base. It is an error to supply a base when converting a non-string. If the argument is outside the integer range a long object will be returned instead. Methods for 1 __abs__ __add__ __and__ __class__ __cmp__ __coerce__ __delattr__ __div__ __divmod__ __float__ __floordiv__ __getattribute__ __getnewargs__ __hash__ __hex__ __index__ __init__ __int__ __invert__ __long__ __lshift__ __mod__ __mul__ __neg__ __new__ __nonzero__ __oct__ __or__ __pos__ __pow__ __radd__ __rand__ __rdiv__ __rdivmod__ __reduce__ __reduce_ex__ __repr__ __rfloordiv__ __rlshift__ __rmod__ __rmul__ __ror__ __rpow__ __rrshift__ __rshift__ __rsub__ __rtruediv__ __rxor__ __setattr__ __str__ __sub__ __truediv__ __xor__ 1 is instance of type object Not subclass of str ************************************ ID: 43539600 Type: <type 'tuple'> Value: (1,) CLASS: <type 'tuple'> DOC: tuple() -> an empty tuple tuple(sequence) -> tuple initialized from sequence's items If the argument is a tuple, the return value is the same object. Methods for (1,) __add__ __class__ __contains__ __delattr__ __eq__ __ge__ __getattribute__ __getitem__ __getnewargs__ __getslice__ __gt__ __hash__ __init__ __iter__ __le__ __len__ __lt__ __mul__ __ne__ __new__ __reduce__ __reduce_ex__ __repr__ __rmul__ __setattr__ __str__ (1,) is instance of type object Not subclass of str ************************************ ID: 43387600 Type: <type 'list'> Value: [1] CLASS: <type 'list'> DOC: list() -> new list list(sequence) -> new list initialized from sequence's items Methods for [1] __add__ __class__ __contains__ __delattr__ __delitem__ __delslice__ __eq__ __ge__ __getattribute__ __getitem__ __getslice__ __gt__ __hash__ __iadd__ __imul__ __init__ __iter__ __le__ __len__ __lt__ __mul__ __ne__ __new__ __reduce__ __reduce_ex__ __repr__ __reversed__ __rmul__ __setattr__ __setitem__ __setslice__ __str__ append count extend index insert pop remove reverse sort [1] is instance of type object Not subclass of str ************************************ ID: 43539936 Type: <type 'str'> Value: 'hello' CLASS: <type 'str'> DOC: str(object) -> string Return a nice string representation of the object. If the argument is a string, the return value is the same object. Methods for hello __add__ __class__ __contains__ __delattr__ __eq__ __ge__ __getattribute__ __getitem__ __getnewargs__ __getslice__ __gt__ __hash__ __init__ __le__ __len__ __lt__ __mod__ __mul__ __ne__ __new__ __reduce__ __reduce_ex__ __repr__ __rmod__ __rmul__ __setattr__ __str__ capitalize center count decode encode endswith expandtabs find index isalnum isalpha isdigit islower isspace istitle isupper join ljust lower lstrip partition replace rfind rindex rjust rpartition rsplit rstrip split splitlines startswith strip swapcase title translate upper zfill hello is instance of type object is subclass of str ************************************