python反射
2021-02-17 21:19
标签:comm homepage log 代码 input cell home table import 反射:是利用字符串的形式去对象 (模块) 中操作 (寻找/检查/删除/设置) 成员,以後看其他源碼的時候會經常看到反射,最有代表性的就是 Tornado 和 Django 框架 假设创建了一个common.py,程序里有3个功能,比如网站里的登录页面、主页页面和登出页面都是不同的页面,要显示的内容都不一样 这个时候,就可以运用反射的方法(参考调用方法二的代码),直接基于用户输入,返回需要執行的功能,这样就可以减少判断逻辑代码需要的时间。 反射写法 运用 hasattr( ) 、 getattr( )、delattr( )、setattr( ) 函数来实现,這几個反射函数分別接收兩個参数(参数一可以是模块, 参数二是参数一的成員 - 它接受一个字符串类型的成员名称),比如说:如果 common 模块里有 login( ) 函数,在调用反射时,基本代码语法是 hasattr(s2,"login") python反射 标签:comm homepage log 代码 input cell home table import 原文地址:https://www.cnblogs.com/1314520xh/p/12694953.html案例例子
def login():
print("Login Page")
def logout():
print("Logout Page")
def home():
print("HomePage")
再创建一个py程序:index.py,程序一般是写一个判断然后会基于调用不同的功能返回不同的结果(参考调用方法一的代码)。
import common
#根据用户不同的输入而返回不同的信息
def run():
inp = input("请输入要访问的 url: ")
if inp == "login": # 当用户输入 login,还看到 login 页面
common.login()
elif inp == "logout": # 当用户输入 logout,还看到 logout 页??面
common.logout()
elif inp == "home": # 当用户输入 home,还看到 home 页面
common.home()
else:
print("404")
if __name__ == "__main__":
run()
index.py 调用方法一
# 利用字符串的形式去对象 (模块) 中操作 (寻找/检查) 成员
import common
def run():
inp = input("请输入要访问的 url: ")
is_exists = hasattr(common,inp) # 检查用户输入是否在common模块里存在的一个成员
if is_exists:
func = getattr(common, inp) # 到common模块寻找用户输入的一个成员
func()
else:
print("404")
if __name__ == "__main__":
run()
index.py 调用方法二
#s2.py
def login():
print("login....")
#s1.py
import s2
if hasattr(s2,"login"):
func = getattr(s2, "login") #接受字符串类型的成员名称
func()
"""
login....
"""
hasattr
(参数一,参数二)
# 到模块里检查成员
#参数一可以是模块, 参数二是参数一的成员
getattr
(参数一,参数二)
# 到模块里寻找成员
#参数一可以是模块, 参数二是参数一的成员
delattr
(参数一,参数二)
# 到模块裡把這個成員删掉
#参数一可以是模块, 参数二是参数一的成员
setattr
(参数一,参数二)
# 到模块裡再设置一個成員
#参数一可以是模块, 参数二是参数一的成员
hasattr
(参数一,参数二)
# 到模块里检查成员
#参数一可以是模块, 参数二是参数一的成员
getattr
(参数一,参数二)
# 到模块里寻找成员
#参数一可以是模块, 参数二是参数一的成员
delattr
(参数一,参数二)
# 到模块裡把這個成員删掉
#参数一可以是模块, 参数二是参数一的成员
setattr
(参数一,参数二)
# 到模块裡再设置一個成員
#参数一可以是模块, 参数二是参数一的成员
上一篇:SpringMVC2