首页 > 其他分享 >反射 hasattr 判断属性是否存在和getattr 赋值给f,f()

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

时间:2023-07-15 14:23:21浏览次数:34  
标签:Website website self getattr choose print page hasattr 赋值

# 反射
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")
   

 

标签:Website,website,self,getattr,choose,print,page,hasattr,赋值
From: https://www.cnblogs.com/haha1988/p/17556066.html

相关文章

  • python解包赋值
    Python解包赋值作为一名经验丰富的开发者,我很乐意教你如何实现Python解包赋值。解包赋值是Python中一种非常强大和便捷的特性,它可以同时为多个变量赋值。流程概述下面是实现Python解包赋值的基本流程:步骤描述1创建一个包含多个值的可迭代对象(如元组、列表等)2定义......
  • 时序电路中阻塞赋值和非阻塞赋值
    FPGA----非阻塞赋值与阻塞赋值1.0简介2.0阻塞赋值&非阻塞赋值2.1阻塞赋值2.2非阻塞赋值2.3区别3.0编码准则4.0举例准则1)时序电路建模时,用非阻塞赋值;准则2)锁存器电路建模时,用非阻塞赋值;准则3)用always块建立组合逻辑模型时,用阻塞赋值;准则4)在同一个always块中建......
  • 在时序电路中使用阻塞赋值会怎样
    阻塞赋值的使用如之前介绍所述,建议使用阻塞赋值来描述组合逻辑设计。但是,如果在编码时序逻辑行为时使用阻塞赋值,会发生什么?这是需要解决的最重要的问题之一,对后续讨论很重要。如果阻塞赋值用于编码时序逻辑的行为,则可以观察到综合结果不是正确的功能设计意图。接下来介绍使用......
  • java的short类型怎么赋值
    在Java中,short类型是一种整数数据类型,占用16位(2个字节)的内存空间。short类型的取值范围为-32768到32767。要给short类型变量赋值,可以通过以下几种方式:直接赋值shortnum=10;在这个例子中,变量num被赋值为10,这是一种直接赋值的方式。由于10是一个常量,它被认为是int类型的,但......
  • Python-变量赋值.py
     1#!/usr/bin/python 2#coding=UTF-8 3 4 5''' 6变量赋值 7 8Python中的变量赋值不需要类型声明。 9 10每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。 11 12每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 13 14......
  • 【ChernoC++笔记】移动赋值运算符
    【90】【ChernoC++】【中字】stdmove与移动赋值操作符▶️移动构造与std::move接上节的String类,我们可以通过string来构造新的对象dest://拷贝构造Stringstring="Hello";Stringdest=string;为了使用移动构造函数,string需要cast为临时变量://移动构造Stringdest=(s......
  • C# 给PictureBox赋值图像时,报“参数无效”异常的解决方法!
    原因:Winform的窗体中显示9个Picturebox控件,由于更新速度较快偶尔会"参数无效"的异常。异常图像如下:通过测试知:1,注释PictureBox.Image.Dispose(),不会报异常;2,注释PictureBox.Image=null,还是会报异常!选择释放的原因:由于刷新图像较快内存占用较大,所以选择主动用Dispose(),=nu......
  • 给变量赋值时右侧是运算符||变量值是什么?
    逻辑运算符||(或)按照左侧优先级先判断左侧的值是否为true,如果左侧的值为真则返回左侧的值;如果左侧的值为假,则返回右侧的值。如果id的值为假值("undefined"、"null"、""、0、false)中的任何一个,则query取cache变量的值0letid='b54237ef30f64018a05441b33e1373c1';letcache=......
  • SQ工具|3|界址点线生成|ZDZHDM赋值
    以 不动产登记数据库TD/T1066-2021数据库规范中的宗地及界址点线为依据界面介绍: 此工具主要实现了界址线属性的计算,以ZDZHDM(记录相邻界址点、界址线的宗地代码)为主,所需数据包括对应的宗地数据界址点自动赋值包括:界址线自动赋值包括:如果缺少界址点、界址线数据,点击......
  • js 控制select 和 radio 赋值和并传值
    js控制select和radio并赋值和传值下面是select用法时:           <selectid="selectId"name="leibname"οnchange="ckc(this.options[this.options.selectedIndex].value);"><optionid="lei1"style="width:150px......