反射基础认识
一 * 反射基础认识
1. 关键字必须有一个字符串 用类或者对象去操控方法属性
hasattr 判断对象中是否有这个变量或者方法
getattr 获取对象中的方法或者变量中的内存地址
setattr 为对象添加变量或者方法
delattr 删除对象中的变量但是不能删除方法
类class 属性 方法 实例化对象
2.登陆注册认证前提是创建一个文件夹命名为反射即可
test.py
from 反射.opt import function
#设计方法登陆注册退出功能 字典用反射实现
"""
1.把功能放到列表中然后循环出来
2.如果选择哪一种功能就实现哪一种方法
根据序号来选择功能1.登录2.注册 3.退出
1.将不同的功能放到元组中,调用字符串的形式用反射 选取值来进行功能的选择
元组放到列表中然后一个一个循环出来因为列表中有顺序
枚举的特点是有序号默认从0开始和元组中要取得第一个值值从零开始
2.选择数字获得某种元素也就是小元组里面的功能也就是登陆注册退出函数
输入的数字是索引值减一(因为索引从1开始,但是默认索引从0开始所以用输入的数字减1)
用getattr操作方法
3.main方法中将A类进行实例化对象,用实例化对象进行调用
想要让函数执行加括号
4.禁止输入123如果输入其他会报错之后的解决方法
判断除了int类型用抛异常来解决
5.保证必须有另外一个文件的存在用判断语句
"""
#列表是有顺序的写功能 用索引取值在元组中获得功能反射得到第二个元素来取得字符串的形式来实现相应的功能
def main():
list=[("登录","login"),("注册","regist"),("退出","exit")]
#通过枚举功能来进行展示相应的元素序号和值
for index,valuein enumerate(list,1):
#序号默认从0开始如果要从1开始+1 值是从第一个功能登录注册退出的索引为零
print(index,value[0])
while True:
#try except抛异常事地数字在规定的范围内
try:
#用户自定义 输入用户想要输入的数字来获得相应的功能
num=int(input("please input number to get the function*"))
#用list里面的索引获得功能操作为了得到不同功能的不同操作在另外类中来定义函数
str=list[num-1][1]
print(str)
#判断一下是否有该属性
if hasattr(function,str):
#将类进行实例化之后进行反射 得到和功能一样的操作即可
obj=function()
getattr(obj,str)()
#判断一下程序中不是1 2 3的话是字符串或者超过3的话怎么解决
except:
print("输入有误,请重新输入")
main()
opt.py
""
登录功能函数实现登录功能
注册功能函数实现注册功能
点击1实现登录函数功能
实例化之后用对象进行调用
"""
class function:
def login(self):
username=input("username")
password=input("password")
if username=="幼姿沫" and password=="123456":
print("登陆成功")
else:
print("登陆失败")
def regist(self):
user=input("user")
pwd=input("pwd")
if user=="幼姿沫" and pwd=="123456":
print("注册成功")
else:
print("注册失败")