反射

导引

class Teacher:
    dic={'查看学生信息':'','查看老师信息':''}
    def show_student(self):
        print('show student')

    def show_teacher(self):
        print('show teacher')
        
menue=Teacher.dic
for i in menue:
    print(i)

通过上面的代码可以查看字典里面的信息

那么通过getattr即可以实现

class Teacher:
    dic={'查看学生信息':'','查看老师信息':''}
    def show_student(self):
        print('show student')

    def show_teacher(self):
        print('show teacher')
ret=getattr(Teacher,'dic')#注意这里的格式是:类名,‘方法名’
print(ret)
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py
{'查看学生信息': '', '查看老师信息': ''}

Process finished with exit code 0
hasattr
class Teacher:
    dic={'查看学生信息':'','查看老师信息':''}
    def show_student(self):
        print('show student')

    def show_teacher(self):
        print('show teacher')
#有时候可能代码中不存在dic这个对象,那么在调用之前就需要判断一下,但是hasattr和getattr括号中的内容必须保持一致
if hasattr(Teacher,'dic'):
    ret=getattr(Teacher,'dic')
    print(ret)

进阶

class Teacher:
    dic={'查看学生信息':'show student','查看老师信息':'show teacher'}
    def show_student(self):
        print('show student')

    def show_teacher(self):
        print('show teacher')
for k in Teacher.dic:
    print(k)
key=input('请输入需求:')
print(Teacher.dic[key])
if hasattr(Teacher,Teacher.dic[key]):
    func=getattr(Teacher,Teacher.dic[key])
    func()

D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py
查看学生信息
查看老师信息
请输入需求:查看学生信息
show student

Process finished with exit code 0

从上面的代码可以看出,这里不用判断输入的内容是什么,就可以直接调用相关内容.

加入这里不适用反射,那么

class Teacher:
    dic={'查看学生信息':'show student','查看老师信息':'show teacher'}
    def show_student(self):
        print('show student')

    def show_teacher(self):
        print('show teacher')
for k in Teacher.dic:
    print(k)
key=input('请输入需求:')
if key=='查看学生信息':
    print(dic[key])#需要增加这一步,比较麻烦。在这个例子中可能性比较少;还能实现;但是如果未来可能性比较多的时候,代码就会比较复杂

上面的例子就是反射对象的属性

反射的定义

是用字符串形式的名字去操作变量。

反射对象中的属性和方法

:hasattr getattr setattr delattr

 

反射的用处:

对象名,获取对象的属性和普通方法
类名 获取静态属性和类方法和静态方法

反射对象的方法

class A:
    def func(self):
        print('in func')

a=A()
a.name='alex'
ret=getattr(a,'func')
print(ret)#得到一个绑定方法
ret()#调用了func函数

反射类的属性和方法

class A:
    price=20
    @classmethod
    def func(cls):
        print('in func')

a=A()
#反射类的属性
print(getattr(a,'price'))
print(getattr(A,'price'))
#反射类的方法
print(getattr(a,'func'))

反射模块

首先自定义一个名为‘my’的python文件

day='monday'
def func():
    return 'wahaha'

反射模块中的代码

import my
#反射模块的属性
print(my.day)
print(getattr(my,'day'))
#反射模块的方法
print(getattr(my,'func'))

反射内置模块的方法

import sys
year=2018
print(sys.modules)#找到所有模块
print(sys.modules['__main__'])#找到当前页面模块
#根据反射的公式:当前模块,‘对象或者方法名’,那么当前模块名如何确定?
#通过sys 方法找到了,就是:sys.modules['__main__'],所以

#反射自己模块中的变量
print(getattr(sys.modules['__main__'],'year'))
print(getattr(sys.modules[__name__],'year'))#如果是当前页面就是执行当前页面,如果是调用页面就执行调用页面
#反射自己模块中的方法
def qq():
    print('qq')
print(getattr(sys.modules['__main__'],'qq'))

D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py
{'sys': <module 'sys' (built-in)>, 'builtins': <module 'builtins' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>, '_imp': <module '_imp' (built-in)>, '_thread': <module '_thread' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_weakref': <module '_weakref' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, '_frozen_importlib_external': <module 'importlib._bootstrap_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'nt': <module 'nt' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'encodings': <module 'encodings' from 'D:\\anoconda\\lib\\encodings\\__init__.py'>, 'codecs': <module 'codecs' from 'D:\\anoconda\\lib\\codecs.py'>, '_codecs': <module '_codecs' (built-in)>, 'encodings.aliases': <module 'encodings.aliases' from 'D:\\anoconda\\lib\\encodings\\aliases.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'D:\\anoconda\\lib\\encodings\\utf_8.py'>, '_signal': <module '_signal' (built-in)>, '__main__': <module '__main__' from 'F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py'>, 'encodings.latin_1': <module 'encodings.latin_1' from 'D:\\anoconda\\lib\\encodings\\latin_1.py'>, 'io': <module 'io' from 'D:\\anoconda\\lib\\io.py'>, 'abc': <module 'abc' from 'D:\\anoconda\\lib\\abc.py'>, '_abc': <module '_abc' (built-in)>, 'site': <module 'site' from 'D:\\anoconda\\lib\\site.py'>, 'os': <module 'os' from 'D:\\anoconda\\lib\\os.py'>, 'stat': <module 'stat' from 'D:\\anoconda\\lib\\stat.py'>, '_stat': <module '_stat' (built-in)>, 'ntpath': <module 'ntpath' from 'D:\\anoconda\\lib\\ntpath.py'>, 'genericpath': <module 'genericpath' from 'D:\\anoconda\\lib\\genericpath.py'>, 'os.path': <module 'ntpath' from 'D:\\anoconda\\lib\\ntpath.py'>, '_collections_abc': <module '_collections_abc' from 'D:\\anoconda\\lib\\_collections_abc.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'D:\\anoconda\\lib\\_sitebuiltins.py'>, '_bootlocale': <module '_bootlocale' from 'D:\\anoconda\\lib\\_bootlocale.py'>, '_locale': <module '_locale' (built-in)>, 'encodings.gbk': <module 'encodings.gbk' from 'D:\\anoconda\\lib\\encodings\\gbk.py'>, '_codecs_cn': <module '_codecs_cn' (built-in)>, '_multibytecodec': <module '_multibytecodec' (built-in)>, 'types': <module 'types' from 'D:\\anoconda\\lib\\types.py'>, 'importlib': <module 'importlib' from 'D:\\anoconda\\lib\\importlib\\__init__.py'>, 'importlib._bootstrap': <module 'importlib._bootstrap' (frozen)>, 'importlib._bootstrap_external': <module 'importlib._bootstrap_external' (frozen)>, 'warnings': <module 'warnings' from 'D:\\anoconda\\lib\\warnings.py'>, 'importlib.util': <module 'importlib.util' from 'D:\\anoconda\\lib\\importlib\\util.py'>, 'importlib.abc': <module 'importlib.abc' from 'D:\\anoconda\\lib\\importlib\\abc.py'>, 'importlib.machinery': <module 'importlib.machinery' from 'D:\\anoconda\\lib\\importlib\\machinery.py'>, 'contextlib': <module 'contextlib' from 'D:\\anoconda\\lib\\contextlib.py'>, 'collections': <module 'collections' from 'D:\\anoconda\\lib\\collections\\__init__.py'>, 'operator': <module 'operator' from 'D:\\anoconda\\lib\\operator.py'>, '_operator': <module '_operator' (built-in)>, 'keyword': <module 'keyword' from 'D:\\anoconda\\lib\\keyword.py'>, 'heapq': <module 'heapq' from 'D:\\anoconda\\lib\\heapq.py'>, '_heapq': <module '_heapq' (built-in)>, 'itertools': <module 'itertools' (built-in)>, 'reprlib': <module 'reprlib' from 'D:\\anoconda\\lib\\reprlib.py'>, '_collections': <module '_collections' (built-in)>, 'functools': <module 'functools' from 'D:\\anoconda\\lib\\functools.py'>, '_functools': <module '_functools' (built-in)>, 'backports': <module 'backports' from 'D:\\anoconda\\lib\\site-packages\\backports\\__init__.py'>, 'mpl_toolkits': <module 'mpl_toolkits' (namespace)>, 'sphinxcontrib': <module 'sphinxcontrib' from 'D:\\anoconda\\lib\\site-packages\\sphinxcontrib\\__init__.py'>, 'zope': <module 'zope' from 'D:\\anoconda\\lib\\site-packages\\zope\\__init__.py'>, 'sitecustomize': <module 'sitecustomize' from 'D:\\系统工具\\pycharm\\PyCharm 2018.3.2\\helpers\\pycharm_matplotlib_backend\\sitecustomize.py'>, 'matplotlib': <module 'matplotlib' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\__init__.py'>, '__future__': <module '__future__' from 'D:\\anoconda\\lib\\__future__.py'>, 'six': <module 'six' from 'D:\\anoconda\\lib\\site-packages\\six.py'>, 'struct': <module 'struct' from 'D:\\anoconda\\lib\\struct.py'>, '_struct': <module '_struct' (built-in)>, 'atexit': <module 'atexit' (built-in)>, 'distutils': <module 'distutils' from 'D:\\anoconda\\lib\\distutils\\__init__.py'>, 'distutils.version': <module 'distutils.version' from 'D:\\anoconda\\lib\\distutils\\version.py'>, 're': <module 're' from 'D:\\anoconda\\lib\\re.py'>, 'enum': <module 'enum' from 'D:\\anoconda\\lib\\enum.py'>, 'sre_compile': <module 'sre_compile' from 'D:\\anoconda\\lib\\sre_compile.py'>, '_sre': <module '_sre' (built-in)>, 'sre_parse': <module 'sre_parse' from 'D:\\anoconda\\lib\\sre_parse.py'>, 'sre_constants': <module 'sre_constants' from 'D:\\anoconda\\lib\\sre_constants.py'>, 'copyreg': <module 'copyreg' from 'D:\\anoconda\\lib\\copyreg.py'>, 'inspect': <module 'inspect' from 'D:\\anoconda\\lib\\inspect.py'>, 'dis': <module 'dis' from 'D:\\anoconda\\lib\\dis.py'>, 'opcode': <module 'opcode' from 'D:\\anoconda\\lib\\opcode.py'>, '_opcode': <module '_opcode' (built-in)>, 'collections.abc': <module 'collections.abc' from 'D:\\anoconda\\lib\\collections\\abc.py'>, 'linecache': <module 'linecache' from 'D:\\anoconda\\lib\\linecache.py'>, 'tokenize': <module 'tokenize' from 'D:\\anoconda\\lib\\tokenize.py'>, 'token': <module 'token' from 'D:\\anoconda\\lib\\token.py'>, 'locale': <module 'locale' from 'D:\\anoconda\\lib\\locale.py'>, 'logging': <module 'logging' from 'D:\\anoconda\\lib\\logging\\__init__.py'>, 'time': <module 'time' (built-in)>, 'traceback': <module 'traceback' from 'D:\\anoconda\\lib\\traceback.py'>, 'weakref': <module 'weakref' from 'D:\\anoconda\\lib\\weakref.py'>, '_weakrefset': <module '_weakrefset' from 'D:\\anoconda\\lib\\_weakrefset.py'>, 'string': <module 'string' from 'D:\\anoconda\\lib\\string.py'>, '_string': <module '_string' (built-in)>, 'threading': <module 'threading' from 'D:\\anoconda\\lib\\threading.py'>, 'shutil': <module 'shutil' from 'D:\\anoconda\\lib\\shutil.py'>, 'fnmatch': <module 'fnmatch' from 'D:\\anoconda\\lib\\fnmatch.py'>, 'posixpath': <module 'posixpath' from 'D:\\anoconda\\lib\\posixpath.py'>, 'errno': <module 'errno' (built-in)>, 'zlib': <module 'zlib' (built-in)>, 'bz2': <module 'bz2' from 'D:\\anoconda\\lib\\bz2.py'>, '_compression': <module '_compression' from 'D:\\anoconda\\lib\\_compression.py'>, '_bz2': <module '_bz2' from 'D:\\anoconda\\DLLs\\_bz2.pyd'>, 'lzma': <module 'lzma' from 'D:\\anoconda\\lib\\lzma.py'>, '_lzma': <module '_lzma' from 'D:\\anoconda\\DLLs\\_lzma.pyd'>, 'tempfile': <module 'tempfile' from 'D:\\anoconda\\lib\\tempfile.py'>, 'random': <module 'random' from 'D:\\anoconda\\lib\\random.py'>, 'math': <module 'math' (built-in)>, 'hashlib': <module 'hashlib' from 'D:\\anoconda\\lib\\hashlib.py'>, '_hashlib': <module '_hashlib' from 'D:\\anoconda\\DLLs\\_hashlib.pyd'>, '_blake2': <module '_blake2' (built-in)>, '_sha3': <module '_sha3' (built-in)>, 'bisect': <module 'bisect' from 'D:\\anoconda\\lib\\bisect.py'>, '_bisect': <module '_bisect' (built-in)>, '_random': <module '_random' (built-in)>, 'matplotlib.cbook': <module 'matplotlib.cbook' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\cbook\\__init__.py'>, 'six.moves': <module 'six.moves' (<six._SixMetaPathImporter object at 0x000001AB1718B470>)>, 'datetime': <module 'datetime' from 'D:\\anoconda\\lib\\datetime.py'>, '_datetime': <module '_datetime' (built-in)>, 'glob': <module 'glob' from 'D:\\anoconda\\lib\\glob.py'>, 'gzip': <module 'gzip' from 'D:\\anoconda\\lib\\gzip.py'>, 'numbers': <module 'numbers' from 'D:\\anoconda\\lib\\numbers.py'>, 'numpy': <module 'numpy' from 'D:\\anoconda\\lib\\site-packages\\numpy\\__init__.py'>, 'numpy._globals': <module 'numpy._globals' from 'D:\\anoconda\\lib\\site-packages\\numpy\\_globals.py'>, 'numpy.__config__': <module 'numpy.__config__' from 'D:\\anoconda\\lib\\site-packages\\numpy\\__config__.py'>, 'numpy.version': <module 'numpy.version' from 'D:\\anoconda\\lib\\site-packages\\numpy\\version.py'>, 'numpy._import_tools': <module 'numpy._import_tools' from 'D:\\anoconda\\lib\\site-packages\\numpy\\_import_tools.py'>, 'numpy.add_newdocs': <module 'numpy.add_newdocs' from 'D:\\anoconda\\lib\\site-packages\\numpy\\add_newdocs.py'>, 'numpy.lib': <module 'numpy.lib' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\__init__.py'>, 'numpy.lib.info': <module 'numpy.lib.info' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\info.py'>, 'numpy.lib.type_check': <module 'numpy.lib.type_check' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\type_check.py'>, 'numpy.core': <module 'numpy.core' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\__init__.py'>, 'numpy.core.info': <module 'numpy.core.info' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\info.py'>, 'numpy.core.multiarray': <module 'numpy.core.multiarray' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\multiarray.cp37-win_amd64.pyd'>, 'numpy.core.umath': <module 'numpy.core.umath' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\umath.cp37-win_amd64.pyd'>, 'numpy.core._internal': <module 'numpy.core._internal' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\_internal.py'>, 'numpy.compat': <module 'numpy.compat' from 'D:\\anoconda\\lib\\site-packages\\numpy\\compat\\__init__.py'>, 'numpy.compat._inspect': <module 'numpy.compat._inspect' from 'D:\\anoconda\\lib\\site-packages\\numpy\\compat\\_inspect.py'>, 'numpy.compat.py3k': <module 'numpy.compat.py3k' from 'D:\\anoconda\\lib\\site-packages\\numpy\\compat\\py3k.py'>, 'pathlib': <module 'pathlib' from 'D:\\anoconda\\lib\\pathlib.py'>, 'urllib': <module 'urllib' from 'D:\\anoconda\\lib\\urllib\\__init__.py'>, 'urllib.parse': <module 'urllib.parse' from 'D:\\anoconda\\lib\\urllib\\parse.py'>, 'ctypes': <module 'ctypes' from 'D:\\anoconda\\lib\\ctypes\\__init__.py'>, '_ctypes': <module '_ctypes' from 'D:\\anoconda\\DLLs\\_ctypes.pyd'>, 'ctypes._endian': <module 'ctypes._endian' from 'D:\\anoconda\\lib\\ctypes\\_endian.py'>, 'numpy.core.numerictypes': <module 'numpy.core.numerictypes' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\numerictypes.py'>, 'numpy.core.numeric': <module 'numpy.core.numeric' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\numeric.py'>, 'pickle': <module 'pickle' from 'D:\\anoconda\\lib\\pickle.py'>, '_compat_pickle': <module '_compat_pickle' from 'D:\\anoconda\\lib\\_compat_pickle.py'>, '_pickle': <module '_pickle' (built-in)>, 'numpy.core.fromnumeric': <module 'numpy.core.fromnumeric' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\fromnumeric.py'>, 'numpy.core._methods': <module 'numpy.core._methods' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\_methods.py'>, 'numpy.core.arrayprint': <module 'numpy.core.arrayprint' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\arrayprint.py'>, 'numpy.core.defchararray': <module 'numpy.core.defchararray' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\defchararray.py'>, 'numpy.core.records': <module 'numpy.core.records' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\records.py'>, 'numpy.core.memmap': <module 'numpy.core.memmap' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\memmap.py'>, 'numpy.core.function_base': <module 'numpy.core.function_base' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\function_base.py'>, 'numpy.core.machar': <module 'numpy.core.machar' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\machar.py'>, 'numpy.core.getlimits': <module 'numpy.core.getlimits' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\getlimits.py'>, 'numpy.core.shape_base': <module 'numpy.core.shape_base' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\shape_base.py'>, 'numpy.core.einsumfunc': <module 'numpy.core.einsumfunc' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\einsumfunc.py'>, 'numpy.testing': <module 'numpy.testing' from 'D:\\anoconda\\lib\\site-packages\\numpy\\testing\\__init__.py'>, 'unittest': <module 'unittest' from 'D:\\anoconda\\lib\\unittest\\__init__.py'>, 'unittest.result': <module 'unittest.result' from 'D:\\anoconda\\lib\\unittest\\result.py'>, 'unittest.util': <module 'unittest.util' from 'D:\\anoconda\\lib\\unittest\\util.py'>, 'unittest.case': <module 'unittest.case' from 'D:\\anoconda\\lib\\unittest\\case.py'>, 'difflib': <module 'difflib' from 'D:\\anoconda\\lib\\difflib.py'>, 'pprint': <module 'pprint' from 'D:\\anoconda\\lib\\pprint.py'>, 'unittest.suite': <module 'unittest.suite' from 'D:\\anoconda\\lib\\unittest\\suite.py'>, 'unittest.loader': <module 'unittest.loader' from 'D:\\anoconda\\lib\\unittest\\loader.py'>, 'unittest.main': <module 'unittest.main' from 'D:\\anoconda\\lib\\unittest\\main.py'>, 'argparse': <module 'argparse' from 'D:\\anoconda\\lib\\argparse.py'>, 'gettext': <module 'gettext' from 'D:\\anoconda\\lib\\gettext.py'>, 'unittest.runner': <module 'unittest.runner' from 'D:\\anoconda\\lib\\unittest\\runner.py'>, 'unittest.signals': <module 'unittest.signals' from 'D:\\anoconda\\lib\\unittest\\signals.py'>, 'signal': <module 'signal' from 'D:\\anoconda\\lib\\signal.py'>, 'numpy.testing._private': <module 'numpy.testing._private' from 'D:\\anoconda\\lib\\site-packages\\numpy\\testing\\_private\\__init__.py'>, 'numpy.testing._private.utils': <module 'numpy.testing._private.utils' from 'D:\\anoconda\\lib\\site-packages\\numpy\\testing\\_private\\utils.py'>, 'gc': <module 'gc' (built-in)>, 'numpy.lib.utils': <module 'numpy.lib.utils' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\utils.py'>, 'numpy.testing._private.decorators': <module 'numpy.testing._private.decorators' from 'D:\\anoconda\\lib\\site-packages\\numpy\\testing\\_private\\decorators.py'>, 'numpy.testing._private.nosetester': <module 'numpy.testing._private.nosetester' from 'D:\\anoconda\\lib\\site-packages\\numpy\\testing\\_private\\nosetester.py'>, 'numpy.testing._private.pytesttester': <module 'numpy.testing._private.pytesttester' from 'D:\\anoconda\\lib\\site-packages\\numpy\\testing\\_private\\pytesttester.py'>, 'numpy.lib.ufunclike': <module 'numpy.lib.ufunclike' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\ufunclike.py'>, 'numpy.lib.index_tricks': <module 'numpy.lib.index_tricks' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\index_tricks.py'>, 'numpy.lib.function_base': <module 'numpy.lib.function_base' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\function_base.py'>, 'numpy.lib.twodim_base': <module 'numpy.lib.twodim_base' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\twodim_base.py'>, 'numpy.lib.histograms': <module 'numpy.lib.histograms' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\histograms.py'>, 'numpy.matrixlib': <module 'numpy.matrixlib' from 'D:\\anoconda\\lib\\site-packages\\numpy\\matrixlib\\__init__.py'>, 'numpy.matrixlib.defmatrix': <module 'numpy.matrixlib.defmatrix' from 'D:\\anoconda\\lib\\site-packages\\numpy\\matrixlib\\defmatrix.py'>, 'ast': <module 'ast' from 'D:\\anoconda\\lib\\ast.py'>, '_ast': <module '_ast' (built-in)>, 'numpy.linalg': <module 'numpy.linalg' from 'D:\\anoconda\\lib\\site-packages\\numpy\\linalg\\__init__.py'>, 'numpy.linalg.info': <module 'numpy.linalg.info' from 'D:\\anoconda\\lib\\site-packages\\numpy\\linalg\\info.py'>, 'numpy.linalg.linalg': <module 'numpy.linalg.linalg' from 'D:\\anoconda\\lib\\site-packages\\numpy\\linalg\\linalg.py'>, 'numpy.linalg.lapack_lite': <module 'numpy.linalg.lapack_lite' from 'D:\\anoconda\\lib\\site-packages\\numpy\\linalg\\lapack_lite.cp37-win_amd64.pyd'>, 'numpy.linalg._umath_linalg': <module 'numpy.linalg._umath_linalg' from 'D:\\anoconda\\lib\\site-packages\\numpy\\linalg\\_umath_linalg.cp37-win_amd64.pyd'>, 'numpy.lib.stride_tricks': <module 'numpy.lib.stride_tricks' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\stride_tricks.py'>, 'numpy.lib.mixins': <module 'numpy.lib.mixins' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\mixins.py'>, 'numpy.lib.nanfunctions': <module 'numpy.lib.nanfunctions' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\nanfunctions.py'>, 'numpy.lib.shape_base': <module 'numpy.lib.shape_base' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\shape_base.py'>, 'numpy.lib.scimath': <module 'numpy.lib.scimath' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\scimath.py'>, 'numpy.lib.polynomial': <module 'numpy.lib.polynomial' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\polynomial.py'>, 'numpy.lib.arraysetops': <module 'numpy.lib.arraysetops' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\arraysetops.py'>, 'numpy.lib.npyio': <module 'numpy.lib.npyio' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\npyio.py'>, 'numpy.lib.format': <module 'numpy.lib.format' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\format.py'>, 'numpy.lib._datasource': <module 'numpy.lib._datasource' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\_datasource.py'>, 'numpy.lib._iotools': <module 'numpy.lib._iotools' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\_iotools.py'>, 'numpy.lib.financial': <module 'numpy.lib.financial' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\financial.py'>, 'decimal': <module 'decimal' from 'D:\\anoconda\\lib\\decimal.py'>, '_decimal': <module '_decimal' from 'D:\\anoconda\\DLLs\\_decimal.pyd'>, 'numpy.lib.arrayterator': <module 'numpy.lib.arrayterator' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\arrayterator.py'>, 'numpy.lib.arraypad': <module 'numpy.lib.arraypad' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\arraypad.py'>, 'numpy.lib._version': <module 'numpy.lib._version' from 'D:\\anoconda\\lib\\site-packages\\numpy\\lib\\_version.py'>, 'numpy.core._multiarray_tests': <module 'numpy.core._multiarray_tests' from 'D:\\anoconda\\lib\\site-packages\\numpy\\core\\_multiarray_tests.cp37-win_amd64.pyd'>, 'numpy._distributor_init': <module 'numpy._distributor_init' from 'D:\\anoconda\\lib\\site-packages\\numpy\\_distributor_init.py'>, 'numpy._mklinit': <module 'numpy._mklinit' from 'D:\\anoconda\\lib\\site-packages\\numpy\\_mklinit.cp37-win_amd64.pyd'>, 'numpy.fft': <module 'numpy.fft' from 'D:\\anoconda\\lib\\site-packages\\numpy\\fft\\__init__.py'>, 'numpy.fft.info': <module 'numpy.fft.info' from 'D:\\anoconda\\lib\\site-packages\\numpy\\fft\\info.py'>, 'numpy.fft.fftpack': <module 'numpy.fft.fftpack' from 'D:\\anoconda\\lib\\site-packages\\numpy\\fft\\fftpack.py'>, 'numpy.fft.fftpack_lite': <module 'numpy.fft.fftpack_lite' from 'D:\\anoconda\\lib\\site-packages\\numpy\\fft\\fftpack_lite.cp37-win_amd64.pyd'>, 'numpy.fft.helper': <module 'numpy.fft.helper' from 'D:\\anoconda\\lib\\site-packages\\numpy\\fft\\helper.py'>, 'mkl_fft': <module 'mkl_fft' from 'D:\\anoconda\\lib\\site-packages\\mkl_fft\\__init__.py'>, '_cython_0_28_4': <module '_cython_0_28_4'>, 'cython_runtime': <module 'cython_runtime'>, 'mkl_fft._pydfti': <module 'mkl_fft._pydfti' from 'D:\\anoconda\\lib\\site-packages\\mkl_fft\\_pydfti.cp37-win_amd64.pyd'>, 'mkl_fft._numpy_fft': <module 'mkl_fft._numpy_fft' from 'D:\\anoconda\\lib\\site-packages\\mkl_fft\\_numpy_fft.py'>, 'numpy.polynomial': <module 'numpy.polynomial' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\__init__.py'>, 'numpy.polynomial.polynomial': <module 'numpy.polynomial.polynomial' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\polynomial.py'>, 'numpy.polynomial.polyutils': <module 'numpy.polynomial.polyutils' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\polyutils.py'>, 'numpy.polynomial._polybase': <module 'numpy.polynomial._polybase' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\_polybase.py'>, 'numpy.polynomial.chebyshev': <module 'numpy.polynomial.chebyshev' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\chebyshev.py'>, 'numpy.polynomial.legendre': <module 'numpy.polynomial.legendre' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\legendre.py'>, 'numpy.polynomial.hermite': <module 'numpy.polynomial.hermite' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\hermite.py'>, 'numpy.polynomial.hermite_e': <module 'numpy.polynomial.hermite_e' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\hermite_e.py'>, 'numpy.polynomial.laguerre': <module 'numpy.polynomial.laguerre' from 'D:\\anoconda\\lib\\site-packages\\numpy\\polynomial\\laguerre.py'>, 'numpy.random': <module 'numpy.random' from 'D:\\anoconda\\lib\\site-packages\\numpy\\random\\__init__.py'>, 'numpy.random.info': <module 'numpy.random.info' from 'D:\\anoconda\\lib\\site-packages\\numpy\\random\\info.py'>, 'mtrand': <module 'numpy.random.mtrand' from 'D:\\anoconda\\lib\\site-packages\\numpy\\random\\mtrand.cp37-win_amd64.pyd'>, 'numpy.random.mtrand': <module 'numpy.random.mtrand' from 'D:\\anoconda\\lib\\site-packages\\numpy\\random\\mtrand.cp37-win_amd64.pyd'>, 'numpy.ctypeslib': <module 'numpy.ctypeslib' from 'D:\\anoconda\\lib\\site-packages\\numpy\\ctypeslib.py'>, 'numpy.ma': <module 'numpy.ma' from 'D:\\anoconda\\lib\\site-packages\\numpy\\ma\\__init__.py'>, 'numpy.ma.core': <module 'numpy.ma.core' from 'D:\\anoconda\\lib\\site-packages\\numpy\\ma\\core.py'>, 'textwrap': <module 'textwrap' from 'D:\\anoconda\\lib\\textwrap.py'>, 'numpy.ma.extras': <module 'numpy.ma.extras' from 'D:\\anoconda\\lib\\site-packages\\numpy\\ma\\extras.py'>, 'matplotlib.cbook.deprecation': <module 'matplotlib.cbook.deprecation' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\cbook\\deprecation.py'>, 'matplotlib.cbook._backports': <module 'matplotlib.cbook._backports' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\cbook\\_backports.py'>, 'matplotlib.compat': <module 'matplotlib.compat' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\compat\\__init__.py'>, 'matplotlib.compat.subprocess': <module 'matplotlib.compat.subprocess' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\compat\\subprocess.py'>, 'subprocess': <module 'subprocess' from 'D:\\anoconda\\lib\\subprocess.py'>, 'msvcrt': <module 'msvcrt' (built-in)>, '_winapi': <module '_winapi' (built-in)>, 'matplotlib.rcsetup': <module 'matplotlib.rcsetup' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\rcsetup.py'>, 'matplotlib.testing': <module 'matplotlib.testing' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\testing\\__init__.py'>, 'matplotlib.fontconfig_pattern': <module 'matplotlib.fontconfig_pattern' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\fontconfig_pattern.py'>, 'pyparsing': <module 'pyparsing' from 'D:\\anoconda\\lib\\site-packages\\pyparsing.py'>, 'copy': <module 'copy' from 'D:\\anoconda\\lib\\copy.py'>, 'matplotlib.colors': <module 'matplotlib.colors' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\colors.py'>, 'matplotlib._color_data': <module 'matplotlib._color_data' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\_color_data.py'>, 'cycler': <module 'cycler' from 'D:\\anoconda\\lib\\site-packages\\cycler.py'>, 'six.moves.urllib': <module 'six.moves.urllib' (<six._SixMetaPathImporter object at 0x000001AB1718B470>)>, 'six.moves.urllib.request': <module 'six.moves.urllib.request' (<six._SixMetaPathImporter object at 0x000001AB1718B470>)>, 'urllib.request': <module 'urllib.request' from 'D:\\anoconda\\lib\\urllib\\request.py'>, 'base64': <module 'base64' from 'D:\\anoconda\\lib\\base64.py'>, 'binascii': <module 'binascii' (built-in)>, 'email': <module 'email' from 'D:\\anoconda\\lib\\email\\__init__.py'>, 'http': <module 'http' from 'D:\\anoconda\\lib\\http\\__init__.py'>, 'http.client': <module 'http.client' from 'D:\\anoconda\\lib\\http\\client.py'>, 'email.parser': <module 'email.parser' from 'D:\\anoconda\\lib\\email\\parser.py'>, 'email.feedparser': <module 'email.feedparser' from 'D:\\anoconda\\lib\\email\\feedparser.py'>, 'email.errors': <module 'email.errors' from 'D:\\anoconda\\lib\\email\\errors.py'>, 'email._policybase': <module 'email._policybase' from 'D:\\anoconda\\lib\\email\\_policybase.py'>, 'email.header': <module 'email.header' from 'D:\\anoconda\\lib\\email\\header.py'>, 'email.quoprimime': <module 'email.quoprimime' from 'D:\\anoconda\\lib\\email\\quoprimime.py'>, 'email.base64mime': <module 'email.base64mime' from 'D:\\anoconda\\lib\\email\\base64mime.py'>, 'email.charset': <module 'email.charset' from 'D:\\anoconda\\lib\\email\\charset.py'>, 'email.encoders': <module 'email.encoders' from 'D:\\anoconda\\lib\\email\\encoders.py'>, 'quopri': <module 'quopri' from 'D:\\anoconda\\lib\\quopri.py'>, 'email.utils': <module 'email.utils' from 'D:\\anoconda\\lib\\email\\utils.py'>, 'socket': <module 'socket' from 'D:\\anoconda\\lib\\socket.py'>, '_socket': <module '_socket' from 'D:\\anoconda\\DLLs\\_socket.pyd'>, 'selectors': <module 'selectors' from 'D:\\anoconda\\lib\\selectors.py'>, 'select': <module 'select' from 'D:\\anoconda\\DLLs\\select.pyd'>, 'email._parseaddr': <module 'email._parseaddr' from 'D:\\anoconda\\lib\\email\\_parseaddr.py'>, 'calendar': <module 'calendar' from 'D:\\anoconda\\lib\\calendar.py'>, 'email.message': <module 'email.message' from 'D:\\anoconda\\lib\\email\\message.py'>, 'uu': <module 'uu' from 'D:\\anoconda\\lib\\uu.py'>, 'email._encoded_words': <module 'email._encoded_words' from 'D:\\anoconda\\lib\\email\\_encoded_words.py'>, 'email.iterators': <module 'email.iterators' from 'D:\\anoconda\\lib\\email\\iterators.py'>, 'ssl': <module 'ssl' from 'D:\\anoconda\\lib\\ssl.py'>, '_ssl': <module '_ssl' from 'D:\\anoconda\\DLLs\\_ssl.pyd'>, 'urllib.error': <module 'urllib.error' from 'D:\\anoconda\\lib\\urllib\\error.py'>, 'urllib.response': <module 'urllib.response' from 'D:\\anoconda\\lib\\urllib\\response.py'>, 'nturl2path': <module 'nturl2path' from 'D:\\anoconda\\lib\\nturl2path.py'>, 'matplotlib._version': <module 'matplotlib._version' from 'D:\\anoconda\\lib\\site-packages\\matplotlib\\_version.py'>, 'json': <module 'json' from 'D:\\anoconda\\lib\\json\\__init__.py'>, 'json.decoder': <module 'json.decoder' from 'D:\\anoconda\\lib\\json\\decoder.py'>, 'json.scanner': <module 'json.scanner' from 'D:\\anoconda\\lib\\json\\scanner.py'>, '_json': <module '_json' (built-in)>, 'json.encoder': <module 'json.encoder' from 'D:\\anoconda\\lib\\json\\encoder.py'>, 'dateutil': <module 'dateutil' from 'D:\\anoconda\\lib\\site-packages\\dateutil\\__init__.py'>, 'dateutil._version': <module 'dateutil._version' from 'D:\\anoconda\\lib\\site-packages\\dateutil\\_version.py'>}
<module '__main__' from 'F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py'>
2018
2018
<function qq at 0x000001AB16E1C400>

Process finished with exit code 0

setattr和delattr

setattr:设置修改变量

class A:pass
a=A()
setattr(a,'name','alex1')#给a设置了一个名字
setattr(A,'name','alex')#给类设置了一个静态属性
print(A.name)
print(a.name)

delattr:删除一个变量

class A:pass
a=A()
setattr(a,'name','alex1')#给a设置了一个名字
setattr(A,'name','alex')#给类设置了一个静态属性
print(A.name)
print(a.name)
delattr(a,'name')
print(a.name)#由于这里删除对象的name,所以执行结果就是类的name alex
delattr(A,'name')
print(a.name)#这里就报错

 

 

 

 

 

 

 

 

isinstance和issubclass

isinstance(obj,cls)检查是否obj是否是类 cls 的对象

class A:pass
a=A()
print(isinstance(a,A))

D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py
True

Process finished with exit code 0

issubclass(sub, super)检查sub类是否是 super 类的派生类

class A:pass
class B(A):pass
a=A()
print(isinstance(a,A))
print(issubclass(B,A))
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/3.二分查找算法.py
True
True

Process finished with exit code 0

 

posted @ 2019-03-13 20:58  舒畅123  阅读(139)  评论(0)    收藏  举报