反射 hasattr 判断属性是否存在和getattr 赋值给f,f()

胖豆芽 / 2023-07-15 / 原文

# 反射
class Website:
    def register(self):
        print("欢迎进入注册页面")

    def login(self):
        print("欢迎进入登录界面")

    def home(self):
        print("欢迎进入主页")

    def about(self):
        print("关于我们")
# 将类做实例化对象为website
website=Website()
while True:
    choose=input("请输入你要进入的页面")
    # if choose=="register":
    #     page=Website()
    #     page.register()
    # elif choose=="login":
    #     page=Website()
    #     page.login()
    # elif choose == "home":
    #     page = Website()
    #     page.home()
    # elif choose == "about":
    #     page = Website()
    #     page.about()
    # else:
    #     print("404")

    #  使用反射 改良后
    if hasattr(website,choose):# hasattr=have attribute 是否有属性 ; 有则返回 True
        f= getattr(website,choose)# getattr=get attribute 获得属性 ;将对象 website 的属性 choose 的值赋给变量 f
        f()# 调用变量 f 所引用的函数
    else:
        print("404")