python面向对象反射

就是通过字符串的形式操作对象相关属性

反射基本语法 

from django.test import TestCase# Create your tests here.
class Students:def __init__(self, name, gender):self.name = nameself.gender = genderdef play(self, game, novel):print(game, novel)s = Students('lyz', 'male')
print(hasattr(s, 'name'))  # True
print(hasattr(s, 'play'))  # True
print(getattr(s, 'name'))  # lyz
g = getattr(s, 'play')
g('lol', '斗破')

再写一个简单的网页登录示例

class WebSite:def register(self):print('这是注册页面')def login(self):print('这是登录页面')def about(self):print('关于...')while True:choose=input('请输入要进入的页面:')if choose=='register':page=WebSite()page.register()elif choose=='login':page=WebSite()page.login()else:page=WebSite()page.about()

你会发现如果类中写上百种方法,那么if也要写上百种,这种代码很明显不行,这时候就可以使用反射。

page = WebSite()
while True:choose = input('请输入要进入的页面:')# 判断类实例化对象中是否有这个方法if hasattr(page, choose):# 通过字符串调用类的方法g = getattr(page, choose)g()else:print('404')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!

Jenkins部署完毕,如果不安装插件的话,那它就是一个光杆司令,啥事也做不了! 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI/CD必要插件。 但是问题来了,jenkins下载插件速度非常慢&#xff0c…

Educational Codeforces Round 160 (Div. 2) A~E

A.Rating Increase(思维) 题意: 给出一个仅包含数字的字符串 s s s,要求将该字符串按以下要求分成左右两部分 a , b a,b a,b: 两个数字均不包含前导 0 0 0 两个数字均大于 0 0 0 b > a b > a b>a 如果…

算法基础之快速幂

快速幂 核心思想&#xff1a;logk的复杂度求出ak mod p 将k拆成若干个2的n之和 (二进制) #include<iostream>#include<algorithm>using namespace std;typedef long long LL;LL qmi(int a,int k,int p){LL res 1 % p;while(k) //k转为二进制 还有正数 就进行…

U-MixFormer:用于高效语义分割的类unet结构的混合注意力Transformer

论文&#xff1a; 代码&#xff1a;GitHub - RecklessRonan/MuSE 感觉这篇比较优雅无痛涨点欸.....最近要期末了没时间看文章和做实验了&#xff08;摊 摘要 语义分割在Transformer架构的适应下取得了显著的进步。与Transformer的进步并行的是基于CNN的U-Net在高质量医学影…

QT基础介绍

QT介绍 QT 是跨平台的c开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;command user interface&#xff0c;CUI&#xff09;程序。 Qt中文官网&…

互操作性(Interoperability)如何影响着机器学习的发展?

互操作性&#xff08;Interoperability&#xff09;&#xff0c;也称为互用性&#xff0c;即两个系统之间有效沟通的能力&#xff0c;是机器学习未来发展中的关键因素。对于银行业、医疗和其他生活服务行业&#xff0c;我们期望那些用于信息交换的平台可以在我们需要时无缝沟通…

揭开 Vue3 响应式系统的神秘面纱:多种监听状态变量变化的方法大揭秘

在 Vue 3 中&#xff0c;响应式系统是其核心特性之一。通过响应式系统&#xff0c;Vue 可以自动跟踪组件的状态变化&#xff0c;并根据变化更新视图。这使得开发者能够更加高效地开发复杂的用户界面&#xff0c;同时保持代码的可读性和可维护性。在本文中&#xff0c;我们将深入…

mt5和mt4交易软件有什么区别?

MetaTrader 4&#xff08;MT4&#xff09;和MetaTrader 5&#xff08;MT5&#xff09;是两种广泛使用的外汇和金融市场交易平台&#xff0c;由MetaQuotes公司开发。尽管它们都是外汇交易的常见选择&#xff0c;但在功能和特性上存在一些区别。以下是MT4和MT5之间的主要区别&…

python三大开发框架django、 flask 和 fastapi 对比

本文讲述了什么启发了 FastAPI 的诞生&#xff0c;它与其他替代框架的对比&#xff0c;以及从中汲取的经验。 如果不是基于前人的成果&#xff0c;FastAPI 将不会存在。在 FastAPI 之前&#xff0c;前人已经创建了许多工具 。 几年来&#xff0c;我一直在避免创建新框架。首先&…

12.21 知识总结(def之序列化常用字段、常用参数、soruce用法、定制返回字段等)

一、 序列化类常用字段 字段字段构造方式BooleanFieldBooleanField()NullBooleanFieldNullBooleanField()CharFieldCharField(max_lengthNone, min_lengthNone, allow_blankFalse, trim_whitespaceTrue)EmailFieldEmailField(max_lengthNone, min_lengthNone, allow_blankFals…

Educational Codeforces Round 160 (Rated for Div. 2) A~C

目录 A. Rating Increase 题目分析&#xff1a; B. Swap and Delete 题目分析: C. Game with Multiset 题目分析: A. Rating Increase 题目分析&#xff1a; 因为首部不为零&#xff0c;故我们从第二个字符开始遍历&#xff0c;如果遇到第一个不为‘0’的字符&#xff0…

C#文件操作(一)

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第20章《文件》 二、操作文件的相关类 在C#应用程序中Syste.IO名称空间包含用于在文件中读写数据的类。在此我列举一下File、Directory、Path、FileInfo、DirectoryInfo、FileSystemInfo、FileSystemWatcher。其中在Syste…

《Spring Cloud Gateway 技术要点》

中文文档&#xff1f; Spring Cloud Gateway 中文文档 他是如何工作的? 它是如何工作的 路由谓词 12种路由谓词 Route Predicate&#xff08;路由谓词&#xff09;工厂 常见问题 1、深入解析spring cloud gateway】09 巨坑&#xff01;GlobalFilter的执行顺序 2、Sprin…

Lettuce操作redis

Lettuce是一个高性能基于Java编写的Redis驱动框架&#xff0c;底层集成了Project Reactor提供天然的反应式编程&#xff0c;通信框架集成了Netty使用了非阻塞IO&#xff0c;5.x版本之后融合了JDK1.8的异步编程特性&#xff0c;在保证高性能的同时提供了十分丰富易用的API。本文…

伦敦金交易内地与香港有何区别

伦敦金交易是国际银行间市场层面的现货黄黄金交易&#xff0c;亚洲市场的交易中心在中国香港&#xff0c;现在不管是香港本地还是内地的投资者&#xff0c;都可以在网上开户&#xff0c;通过香港的平台参与伦敦金交易&#xff0c;所得到的服务是同等的、公平的、与国际市场接轨…

大规模数据查询:MySQL 与 Spring Boot 分页实战

引言 随着信息时代的到来&#xff0c;数据量的爆发性增长让分页查询成为数据库操作中的常见需求。数据库查询的效率直接影响着系统性能&#xff0c;因此在实际项目中&#xff0c;我们需要精心选择和使用分页查询方法。本文将深入研究在 MySQL 数据库中如何进行分页查询&#xf…

理论篇:什么是NPM以及为什么NPM如此重要

&#x1f4cc; NPM&#xff0c;全称是 Node Package Manager&#xff0c;NodeJS 包管理工具 当我们开始现代化前端项目开发时&#xff0c;总是会被告知需要提前安装NodeJS&#xff0c;而且NodeJS软件包不仅仅会在我们的开发设备上安装NodeJS运行环境&#xff0c;同时会附带NPM工…

2. 创建型模式 - 抽象工厂模式

亦称&#xff1a; Abstract Factory 意图 抽象工厂模式是一种创建型设计模式&#xff0c; 它能创建一系列相关的对象&#xff0c; 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类&#xff0c; 用于表示&#xff1a; 一系列相关产品&…

一套rk3588 rtsp服务器推流的 github 方案及记录 -03(完结)

opencv 解码记录 解码库使用的时候发现瑞芯微以前做过解码库对ffmpeg和gstreamer的支持 然后最近实在不想再调试Rtsp浪费时间了&#xff0c;就从这中间找了一个比较快的方案 ffmpeg 带硬解码库编译 编译流程参考文献 https://blog.csdn.net/T__zxt/article/details/12342435…

C++11特性:可调用对象以及包装器function的使用

在C中存在“可调用对象”这么一个概念。准确来说&#xff0c;可调用对象有如下几种定义&#xff1a; 是一个函数指针&#xff1a; int print(int a, double b) {cout << a << b << endl;return 0; } // 定义函数指针 int (*func)(int, double) &print…