Python 面向对象之反射
Python 面向对象之反射
【一】概念
- 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力
- 反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法)
【二】四个内置函数
-
又叫做反射函数
-
万物皆对象(整数、字符串、函数、模块、类等等)
-
万物皆对象(整数、字符串、函数、模块、类等等)
-
万物皆对象(整数、字符串、函数、模块、类等等)
-
这里提到的对象都是大概念的对象
【1】hassttr
(1)概念
-
hasattr(object, str) -
判断对象是否有相应的属性或者方法
-
第一个参数是对象,第二个参数属性或者方法的字符串
-
返回值为
bool值,有则True,无则False -
注意:类无法找到实例属性
(2)代码
class A:name = "bruce"def __init__(self):self.age = 18def eat(self):print(f"{self.name}eating")# 查看类是否具有相应属性和方法
print(hasattr(A, "name")) # True
print(hasattr(A, "age")) # False
print(hasattr(A, "eat")) # True# 查看对象是否具有相应属性和方法
a = A()
print(hasattr(a, "name")) # True
print(hasattr(a, "age")) # True
print(hasattr(a, "eat")) # True
【3】getattr
(1)概念
-
hasattr(object, name[, default]) -
获取对象的属性或者方法
-
第一个参数是对象,第二个参数属性或者方法的字符串,第三个参数是找不到返回的默认值
-
返回值为属性或者方法或默认值,找不到也没有默认值会报错
(2)代码
class A:name = "bruce"def __init__(self):self.age = 18def eat(self):print(f"{self.name} is eating")a = A()
print(getattr(a, "name")) # bruce
print(getattr(a, "age")) # bruce
res = getattr(a, "eat") # # <bound method A.eat of <__main__.A object at 0x000>>
res() # bruce is eating
# getattr(a, "nname") # 报错
print(getattr(a, "nname", "找不到")) # 找不到
【3】setattr
(1)概念
-
setattr(object, str) -
设置对象的属性或者方法
-
第一个参数是对象,第二个参数是属性的字符串或者方法地址
-
已有就修改,没有就添加
-
注意:给实例添加的方法是属性
(2)代码
class A:name = "bruce"def __init__(self):self.age = 18def eat(self):print(f"{self.name} is eating")a = A()
setattr(a, "name", "lily")
print(getattr(a, "name")) # lily
setattr(a, "age", 20)
print(getattr(a, "age")) # 20def func(self):print("类外的函数1")
# 给实例添加的一个属性,他是方法
setattr(a, "func", func)
print(a.__dict__) # {'age': 20, 'name': 'lily', 'func': <function func at 0x000>}
a.func(a) # 类外的函数1def func(self):print("类外的函数2")
# 给类添加了一个方法
setattr(A, "func", func)
A.func(a) # 类外的函数2
a.func(a) # 类外的函数1
【4】delattr
(1)概念
-
delattr(object, str) -
删除对象的属性或者方法
-
第一个参数是对象,第二个参数是属性或者方法的字符串
-
没有返回值,删除没有的会报错
-
注意:通过实例无法删除类属性或者方法
(2)代码
class A:name = "bruce"def __init__(self):self.age = 18def eat(self):print(f"{self.name} is eating")# 对属性操作
a = A()
# delattr(a, "name") # 无法删除
delattr(a, "age")
print(getattr(a, "age", "找不到")) # 找不到
delattr(A, "name")
print(getattr(A, "name", "找不到")) # 找不到# 对方法操作
a = A()
# delattr(a, "eat") # 无法删除
print(getattr(A, "eat", "找不到")) # 找不到
【三】应用
【1】反射当前模块成员
- 用于查看当前模块下的
import sysclass A:pass
class B(A):pass
def func():passmodule_member = sys.modules[__name__]
print(module_member)
# <module '__main__' from 'D:\\Python\\PythonProjects\\My_projects\\tets_tempory\\main.py'>
print(hasattr(module_member, "B")) # True
print(hasattr(module_member, "func")) # True
【2】动态导入模块
- 通过
importlib模块导入所需要的模块,通过ImportError异常判断模块是否能导入 - 通过
getattr反射获取模块的方法,通过AttributeError异常判断该模块是否具有这个方法
import importlibmodule_name = input("module name:>>>")
method_name = input("method name:>>>")
try:module = importlib.import_module(module_name)method = getattr(module, method_name)method()
except ImportError:print("module not found")
except AttributeError:print("method not found")
【3】动态创建对象
class FirePeaShooter:def introduce(self):print("I`m FirePeaShooter")class IcePeaShooter:def introduce(self):print("T`m IcePeaShooter")type = input("input type (fire or ice):>>>")
global_class = globals()if "fire" in type:class_type = "FirePeaShooter"obj = global_class[class_type]()obj.introduce()
elif "ice" in type:class_type = "IcePeaShooter"obj = global_class[class_type]()obj.introduce()
else:print("wrong")
【四】总结

相关文章:
Python 面向对象之反射
Python 面向对象之反射 【一】概念 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法) 【二】四个内置函数 又叫做反射函数 万物皆对象(整数、字符串、函数、模块、类等等…...
HPM6750开发笔记《DMA接收和发送数据UART例程深度解析》
目录 概述: 端口设置: 代码分析: 运行现象: 概述: DMA(Direct Memory Access)是一种计算机系统中的数据传输技术,它允许数据在不经过中央处理器(CPU)的直…...
SQL IN 操作符
IN 操作符 IN 操作符允许您在 WHERE 子句中规定多个值。 SQL IN 语法 SELECT column1, column2, ... FROM table_name WHERE column IN (value1, value2, ...); 参数说明: column1, column2, ...:要选择的字段名称,可以为多个字段。如果…...
如何使用Plex在Windows系统搭建个人媒体站点公网可访问
文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…...
web前端——clear可以清除浮动产生的影响
clear可以解决高度塌陷的问题,产生的副作用要小 未使用clear之前 <!DOCTYPE html> <head><meta charset"UTF-8"><title>高度塌陷相关学习</title><style>div{font-size:50px;}.box1{width:200px;height:200px;backg…...
centos用yum安装mysql详细教程
1 查询安装mysql的yum源,命令如下 ls /etc/yum.repos.d/ -l 界面如下图所示,未显示mysql的安装源 2 安装mysql相关的yum源,例如: 例如:rpm -ivh mysql57-community-release-el7.rpm 要注意 mysql的版本和系统的版本匹配 mysql57-communi…...
冲刺2024年AMC8竞赛的专题突破:匹克定律和不规则形状面积的求法
先温馨提示:2024年AMC8比赛报名今天是最后一天,如果还想参加比赛的孩子今天务必完成报名,错过今天再等一年。需要AMC8自由报名通道可以问我。 到昨天为止,六分成长已经把过去20多年的AMC8竞赛真题都给大家过了一遍,今天为大家做一…...
阿里云迁移AWS视频点播技术攻坚
文章目录 🐷 背景🦥 简述🐥 Aws服务🦜 AWS CloudFormation🐞 问题🐉 落地方案🦉 Aws vs Aliyun🍄 避坑指南 🐷 背景 由于AWS整体成本略低于阿里云,公司决定将…...
Scrum敏捷认证CSM官方认证班Certified ScrumMaster - CSM认证班
课程简介 Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架,旨在最短时间内交付最大价值。根据2021年全球敏捷状态报告,Scrum及Scrum衍生方法的应用占比达到81%。 在企业的敏捷转型历程中,Scru…...
深度解析qt核心机制:信号槽的多线程行为与对象的线程依附性
对象的线程依附性 每一个学过C以及系统编程的程序员,对于变量会与特定线程有关联都会感到不可思议;在qt中所说的对象的线程依附性,只是针对继承自QObject的对象而言的;对象的线程依附性,并不是代表真的某个底层线程才…...
关于时间格式yyyy-M-d或yyyy-MM-d到yyyy-MM-dd的转换
工作时遇到前端传的时间格式是"2023-12-3 17:41:52",和"2023-1-1 17:41:52"但是我想要的是"2023-12-03 17:41:52"和"2023-01-01 17:41:52"。下面给大家分享几个解决方法 方法一: 找前端!让他改&…...
【Windows】之微软输入法配置小鹤双拼
前言 Windows 自带的输入法微软输入法本身就是个最简洁、最方便的输入法,不需要去安装多余的第三方输入法软件。同时,微软中文拼音输入法支持双拼输入法,但微软自带的双拼输入法不包含小鹤双拼方案的。所以,在这里将会讲解如何配置…...
【AI】使用Jan.ai在本地部署大模型开启AI对话(含通过huggingface下载大模型,实现大模型自由)
文章目录 前言一、Jan.ai是什么?二、下载大模型1. 找到大模型文件地址2. 下载大模型3. 修改model.json文件 三、使用Jan调用大模型进行对话总结 前言 2023年是AIGC元年。以后,每个人多少都会接触到GPT带来的变化。别人都在用,我们也不能落下…...
C++摸版(初阶)----函数模版与类模版
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
Embedded-Project项目介绍
Embedded-Project项目介绍 Server后端项目后端启动连接数据库启动时可能遇到的问题架构介绍 web前端项目前端启动启动时可能遇到的问题架构介绍 前后端分离开发流程 项目地址: https://github.com/Catxiaobai/Embedded-Project Server后端项目 系统后端项目&#…...
golang 的那些花样
从 A Tour of Go 可以看到一些 Go 比较特殊的点 文章目录 变量声明时,类型放在后面Array 的引用 Slicereceiver 和 argumentbuilt-int特殊接口Error 变量声明时,类型放在后面 var i, j int 1, 2declaration-syntax Array 的引用 Slice slices-intro …...
如何设计企业级业务流程?学习华为的流程六级分类经验
业务流程管理(BPM)是一种系统化的方法,用于分析、设计、执行、监控和优化组织的业务流程,以实现预期的目标和价值。业务流程管理中,流程的分级方法有多种,常见的有以下几种: APQC的流程分级方法…...
视频智能分析支持摄像头异常位移检测,监测摄像机异常位移变化,保障监控状态
我们经常在生产场景中会遇到摄像头经过风吹日晒,或者异常的触碰,导致了角度或者位置的变化,这种情况下,如果不及时做出调整,会导致原本的监控条件被破坏,发生事件需要追溯的时候,查不到对应位置…...
C++ UTF-8与GBK字符的转换 —基于Linux 虚拟机 (iconv_open iconv)
1、UTF-8 和 GBK 的区别 GBK:通常简称 GB (“国标”汉语拼音首字母),GBK 包含全部中文字符。 UTF-8 :是一种国际化的编码方式,包含了世界上大部分的语种文字(简体中文字、繁体中文字、英文、…...
云原生十二问
一、什么是云原生? 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代企业希望构建高度可扩展、灵活且具有弹性的应用程序,可以快速更新以满足客户需求。为此,他们使用现代工具和技术,这些工具和技术本质上支…...
保姆级避坑指南:用STM32F103C8T6+ESP8266(AT指令)做WiFi遥控小车,我踩过的那些坑
STM32F103C8T6ESP8266 WiFi遥控小车避坑实战手册 1. 硬件选型与连接:那些容易被忽视的细节 在开始任何代码编写之前,硬件连接的正确性往往决定了项目的成败。使用STM32F103C8T6(俗称"蓝莓板")与ESP8266模块组合时&#…...
Excalidraw结合MCP协议:实现智能架构图与开发生态动态连接
1. 项目概述:当Excalidraw遇见MCP,架构图绘制的效率革命如果你和我一样,日常工作中需要频繁绘制系统架构图、流程图,那么你一定对Excalidraw不陌生。这款开源的、手绘风格的绘图工具,以其简洁、直观和强大的协作能力&a…...
大模型涌现能力:从原理到工程实践的探索与分类
1. 项目概述:从“玄学”到“科学”的涌现能力探索最近和几个做模型研发的朋友聊天,大家不约而同地提到了一个词:“涌现能力”。这个词听起来有点玄乎,像是某种不可预测的“魔法”,但当我们深入讨论时,发现它…...
避坑指南:QGraphicsView自适应缩放时,为什么你的Item总对不齐或留白?
避坑指南:QGraphicsView自适应缩放时Item对齐与留白问题深度解析 在Qt图形界面开发中,QGraphicsView框架因其强大的2D显示能力被广泛应用。但当开发者尝试实现视图内容的自适应缩放时,经常会遇到一个令人头疼的问题——调用fitInView后&#…...
QtUnblockNeteaseMusic终极指南:跨平台音乐解锁工具的技术实现与应用
QtUnblockNeteaseMusic终极指南:跨平台音乐解锁工具的技术实现与应用 【免费下载链接】QtUnblockNeteaseMusic A desktop client for UnblockNeteaseMusic, made with Qt. 项目地址: https://gitcode.com/gh_mirrors/qt/QtUnblockNeteaseMusic 在数字音乐流媒…...
LabVIEW多线程同步:队列、事件、信号量等核心机制详解与实战应用
1. 项目概述:为什么LabVIEW的多线程同步是开发者的必修课?如果你用过LabVIEW,肯定对它的图形化编程和并行执行能力印象深刻。但当你开始构建稍微复杂点的应用,比如一个需要同时采集数据、实时处理、记录日志和更新界面的测控系统时…...
Coding爆发打破「AI泡沫论」,MiniMax能否卡位下一个Google?
【Coding爆发打破「AI泡沫论」】 Coding的爆发,彻底断绝了「AI泡沫论」,这已成为共识。阿里财报显示MaaS ARR超过80亿元,年底还有望再涨三倍以上,意味着只有投入没有回报的周期已过去,能开始盈利,大小玩家都…...
基于ESP32与WLED打造智能可编程灯饰:从硬件连接到软件配置全攻略
1. 项目概述:打造你的专属智能光影秀又到年底了,看着满大街千篇一律的彩灯装饰,是不是觉得有点审美疲劳?想不想自己动手,做一套独一无二、能通过手机随心控制颜色和动画的智能灯饰?今天分享的这个项目&…...
国民技术N32G030K8L7芯片,用MDK从官方FTP下载到点亮LED的保姆级教程
国民技术N32G030K8L7芯片开发实战:从资料获取到LED点亮的全流程指南 拿到一块全新的开发板时,那种既兴奋又忐忑的心情想必每位工程师都经历过。N32G030K8L7作为国民技术推出的高性价比MCU,凭借其出色的性能和丰富的外设资源,正成为…...
三步搞定RPG Maker游戏资源解密:零基础完整指南
三步搞定RPG Maker游戏资源解密:零基础完整指南 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMake…...
