python强大的自省功能

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
                                    
************************************

你可能感兴趣的:(python)