内置函数补充 之 反射

getattr 反射

为什么要有反射?

当在设计一个页面访问的时候,通过用户输入相应的url,进入相应的页面,在用户输入的url地址不存在的时候,返回404错误。

def run():
    inp = input(‘请输入要访问的url:‘)
    if inp == ‘login‘:
        commons.login()
    elif inp == ‘logout‘:
        commons.logout()
    elif inp == ‘home‘:
        commons.home()
    else:
        print(‘404‘)

run()

def login():
    print(‘炫酷登录页面‘)

def logout():
    print(‘炫酷退出页面‘)

def home():
    print(‘炫酷主页面‘)

commons.py

但通过以上的形式进行编写,如果一旦需要增添更多的页面的时候,代码写入的工作量就变得巨大

getattr / hasattr

通过反射即可实现更高效的代码,也是基于反射实现类Web框架的路由系统,

getattr(commons,inp) 的含义就是让getattr自己去commons模块中寻找inp输入中对应的函数,即是login就对应login,是logout就应对logout。
import commons

def run():
    inp = input(‘请输入要访问的url:‘)
    #利用字符串的形式去对象(模块)中操作(寻找/检查)成员
    if hasattr(commons,inp):    #检查是否有相应的成员,如果有进行操作
        func = getattr(commons,inp) #操作成员
        func()
    else:
        print(‘404‘)

run()

def login():
    print(‘炫酷登录页面‘)

def logout():
    print(‘炫酷退出页面‘)

def home():
    print(‘炫酷主页面‘)

commons.py

反射的4个内置函数分别为:

getattr、hasattr、setattr、delattr ,其作用为获取成员、检查成员、设置成员、删除成员

__import__()

如果不同的def函数没有集中在同一个.py文件的模块中,而是根据所能提供的不同功能,散列的分布在众多的.py文件中的时候。

我们不可能去一个一个的import xxx对众多的模块进行一一导入,这个时候我们也可以对import的导入模块的操作进行反射

即以"字符串"的形式导入模块。

def run():
    inp = input(‘请输入要访问的url:‘)

    m,f = inp.split(‘/‘)
    obj = __import__(m)
    if hasattr(obj,f):    #检查是否有相应的成员,如果有进行操作
        func = getattr(obj,f) #操作成员
        func()
    else:
        print(‘404‘)

run()

各__import__()和各.py文件之间的关系图

建设中....

原文地址:https://www.cnblogs.com/evenyao/p/9190868.html

时间: 2024-07-29 02:35:56

内置函数补充 之 反射的相关文章

python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法

一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) #结果为True 2.issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar, Foo)) #结果为True

learn_Day14 内置函数补充、反射、初识面向对象

内置函数 __import__()用于导入模块 getattr 用于寻找模块的指定对象 a = __import__('b')  # b为模块名,b是字符串 ==>> 导入模块b并重新命名为a c = getattr(a,'d')  # d为模块中指定对象 ==>> 找到模块中命名为d的对象 d() ==>> 执行d # getattr(a,'b', c) # 从a模块中导入b.c参数可不写表示找不到报错:c为None表示找不到不报错,返回None. # hasattr

python_day4内置函数补充

之前内容回顾 1.python基础 2.基本数据类型:str.dict.list.tuple.set.. s = "alex" => str # s是创建的一个对象,所有功能被保存在其对应的str的类里 对象是类的实例 isinstance(s, str) ==> True 3.函数式编程 函数定义 内置函数 文件处理 注意: li = [11,22,33,44] def f1(arg):     #此函数没有返回值,默认返回None arg.append(55) li =

内置函数补充,__str__方法、__del__方法 和 __call__方法和元祖

一 .内置函数补充 1.isinstance函数: isinstance(obj,cls)检查obj是否是类 cls 的对象 使用该函数来判断一个函数的类型 2. issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo) 3.下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 clas

Day4 内置函数补充、装饰器

li = [11,22,33,44]def f1(arg): arg.append(55)#函数默认返回值None,函数参数传递的是引用li = f1(li) print(li) 内置函数补充: 判断是否被调用 def f1(): pass print(callable(f1)) ASCII码与数字转换 #数字转换为ASCII码r = chr(65)print(r)#ASCII转换为数字n = ord('a')print(n) 随机验证码 import randomlist_temp =[]fo

Python基础----内置函数补充、匿名函数、递归函数

内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数,b为被除数 示例: 1 >>> divmod(7, 2) 2 (3, 1) #3为商,1为余数 3 >>> divmod(7, 2.5) 4 (2.0, 2.0) 应用:web前端页数计算 1 total_count=73 2 per_count=23 3 res=div

1、面向对象内置函数 2、反射 3、内置方法

1.isinstance()    判断对象所属类型,包括继承关系 2.issubclass() 判断类与类之间的继承关系 class A:pass class B(A): pass print(isinstance(b,B))   # o,t print(isinstance(b,A))  #  o,t class mystr(str): pass ms = mystr("alex") print(type(ms) is str)  # 不包含继承关系,只管一层 print(isin

python26 封装 多态 常用的内置函数 `__str__` `__del__` 反射 动态导入模块

今日内容: 1. 封装 2.多态 3. 常用的内置函数 `__str__ `__del__` 4.反射 5.动态导入模块 #1. 封装 ##1.1 什么是封装 ?(what) 对外部隐藏内部的属性,以及实现细节  , 给外部提供使用的接口 注意:封装有隐藏的意思,但不是单纯的隐藏 1.2学习封装的目的. 就是为了能够限制外界对内部数据的访问 1.3python中属性的权限分为两种 1.公开的 ?           没有任何限制 谁都能访问 2.私有的 ?          只有当前类本身能够访

Python菜鸟之路一:Python基础-内置函数补充

常用内置函数及用法: 1. callable() def callable(i_e_, some_kind_of_function): # real signature unknown; restored from __doc__ """检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功 Return whether the object is callable (i.e., some kin