Python面对对象 - 类的反射机制

news2024/11/25 16:40:33

    Python面对对象类的反射机制是面向对象编程语言中比较重要的功能,可以动态获取对象信息以及动态调用对象。通过字符串形式的类名或属性来访问对应类或属性。


    一、对象的反射



    1. getattr 获取指定字符串名称的对象属性、方法: 当访问的属性不存在时,会报错!



在这里插入图片描述



class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        return (f'Hello,{self.name}')

person = Person('冯大少',18)

name = getattr(person, 'name')
print(name)
age = getattr(person, 'age')
print(age)
func = getattr(person, 'say_hello')()
print(func)
print(getattr(person, 'test'))


    加第3个参数,当访问的属性不存在时,返回指定的内容



在这里插入图片描述



    2、hasattr 判断对象是否有对应的对象属性、方法,返回 bool 值



在这里插入图片描述



    3、setattr 为对象设置一个对象属性 : 可以通过匿名函数调用 name 属性



在这里插入图片描述



    4. delattr 删除指定属性:



在这里插入图片描述



    最后用一个登录验证的例子,再看看类的反射怎样实现校验:



在这里插入图片描述



    通过 hasattr(userverify, username) 去校验 输入的内容,当输入5次都是错误,就触发结束循环前的语句。



在这里插入图片描述



    当校验成功时,调用 login_message 方法,结束循环。



lst = []

class UserVerify:

    def __init__(self, ):
        self.username1 = '冯大少1'
        self.username2 = '冯大少2'
        self.username3 = '冯大少3'
        self.username4 = '冯大少4'
        self.username5 = '冯大少5'

    def login_message(self):
        print(f'登录成功,欢迎{self.username1}访问')

while True:
    userverify = UserVerify()
    username = input('请输入用户名')
    if hasattr(userverify, username):
        func = getattr(userverify, 'login_message')()
        break
    else:
        error_msg = '用户名不存在,请重新输入!'
        print(error_msg)
        lst.append(error_msg)
        if len(lst) >= 5:
          print('输入错误的用户名已经超过当日的上限,请申请相关解除手续')
          break


    关于类的其他高级应用,下一期
将继续分享。

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

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

相关文章

IPv6-重定向,PMTU,GRE隧道

IPv6-重定向,PMTU(路径最大传输单元),GRE隧道(Generic Routing Encapsulation,通用路由封装协议) 重定向过程 触发重定向的条件: 1、报文的入接口,等于自身路由之后的…

深入理解SQLite:存储引擎、索引、事务与锁

文章目录 一、存储引擎二、索引的数据结构和类型2.1 B-Tree2.2 其他类型的索引2.3 小结 三、事务处理中的一致性问题3.1 脏读(Dirty Read)3.2 不可重复读(Non-repeatable Read)3.3 幻读(Phantom Read)3.4 小…

RVM安装Ruby笔记(Mac)

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

mac怎么删除python

mac 默认安装了python2;自己后面又安装了python3;为了方便,现在想将python3换成Anaconda3。 Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 Python3安装之后,在系统中不同目…

记录el-table的表格合并问题

项目需求背景: 利用el-table进行数据展示时,时常会有需要表格合并的情景,比如一个表格由5列组成: 类型 地区 金额 重量 长度 在这个表格里,如果同金额、重量的列可以合并到一起,这时应该怎么做呢&#xff1…

神经网络与深度学习(一)

线性回归 定义 利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 要素 训练集(训练数据)输出数据拟合函数数据条目数 场景 预测价格(房屋、股票等)、预测住院时间&#…

计算机网络 - 基础篇总结

TCP/IP 网络模型有哪几层? 1.应用层 为用户提供应用功能 2.传输层 负责为应用层提供网络支持 使用TCP和UDP 当传输层的数据包大小超过 MSS(TCP 最大报文段长度) ,就要将数据包分块,这样即使中途有一个分块丢失或损坏…

汇总:五个开源的Three.js项目

Three.js 是一个基于 WebGL 的 JavaScript 库,它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性,Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…

OSI七层参考模型

osi即开放系统互联参考模型。 osi的目的是为了解决主机间的通信 从下到上:物理层、数据链路层、网络层、传输层、会话层、表示出、应用层 上三层(应用层、表示出、会话层)负责产生数据,下四层(传输层、网络层、数据…

设计模式(9):外观模式

一.迪米特法则(最少知识原则) 一个软件实体应当尽可能少的与其他实体发生相互作用。 二.外观模式 为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用。它的核心是什么呢,就是为我们的子系统提供一个统一的入口,封装子…

YOLOv5改进系列:升级版ResNet的新主干网络DenseNet

一、论文理论 论文地址:Densely Connected Convolutional Networks 1.理论思想 DenseNet最大化前后层信息交流,通过建立前面所有层与后面层的密集连接,实现了特征在通道维度上的复用,不但减缓了梯度消失的现象,也使其…

【前端Vue】Vue从0基础完整教程第4篇:面经PC端 - Element (下)【附代码文档】

Vue从0基础到大神学习完整教程完整教程(附代码资料)主要内容讲述:vue基本概念,vue-cli的使用,vue的插值表达式,{{ gaga }},{{ if (obj.age > 18 ) { } }},vue指令,综合…

Spring: 在SpringBoot项目中解决前端跨域问题

这里写目录标题 一、什么是跨域问题二、浏览器的同源策略三、SpringBoot项目中解决跨域问题的5种方式:使用CORS1、自定 web filter 实现跨域(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、 CorsFilter(全局跨域)4、使用CrossOrigin注解 (局部跨域) 一、什么是跨域…

稀碎从零算法笔记Day34-LeetCode:最小栈

感谢耶稣,笔者又过了一天“复活节”。月末斩杀一道Hard画上句号 题型:栈、模拟数据结构 链接:155. 最小栈 - 力扣(LeetCode) 来源:LeetCode 题目描述 设计一个支持 push ,pop ,…

适用于 Windows 的 6 个最佳视频转换器

视频转换器可以帮助您在设备上转换和播放不受支持的视频格式。它还可以方便地减小视频文件大小、以通用格式组织所有视频或与其他人共享文件以在不同设备上播放。 Windows 有大量视频转换器可供选择。虽然有些是免费的,但其他一些则提供迎合专业用户的高级功能。在…

Pycharm选择使用Anaconda环境中的Pytorch 失败解决办法之一

前几日想要复现一篇论文,结果给配的台式机完全禁不住,老是报溢出,慢都没事,溢出就很难受了,因此想用自己笔记本的GPU来训练。 安装以后遇到一个问题: Anaconda里创建了环境,安装好了对应pytor…

AR智能眼镜解决方案_MTK平台安卓主板硬件芯片方案开发

AR智能眼镜,是一个可以让现场作业更智能的综合管控设备。采用移动互联网、大数据和云计算等技术,现场数据的采集与分析;同时实现前端现场作业和后端管理的实时连动、信息的同步传输与存储。让前端现场作业更加智能,后端管理更加高…

再次加深理解Java中的并发编程

目录 一、线程、进程、程序 二、线程状态 三、线程的七大参数 四、lock与synchronized锁机制 一)、lock与synchronized锁区别 二)、synchronized锁原理 三)、Lock锁原理 五、synchronized锁升级原理 一)、锁升级基础知识 …

【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈

目录 前言 baby-Codeigniter 组合拳! 前言 本想着说看看go的gin框架就睡了的,r3师傅提醒说赛题环境已经上了,那不赶紧研究下😀 主要来谈谈做题的心路历程 baby-Codeigniter 拿到题目的第一反应应该是:“什么是C…

C之易错注意点转义字符,sizeof,scanf,printf

目录 前言 一:转义字符 1.转义字符顾名思义就是转换原来意思的字符 2.常见的转义字符 1.特殊\b 2. 特殊\ddd和\xdd 3.转义字符常错点----计算字符串长度 注意 : 如果出现\890,\921这些的不是属于\ddd类型的,,不是一个字符…