首页 > 编程语言 >python面向对象之反射

python面向对象之反射

时间:2024-08-05 09:17:24浏览次数:7  
标签:__ 反射 obj name item python self encoding 面向对象

反射,也叫自省。吾日三省吾身,说白了就是自己检测自己,这就叫反射。千万别被这个抽象的名词给吓到了,没什么牛逼的。

反射的四种方法:
1> hasattr(obj,name) #判断obj.name是否存在,name指代属性,包括数据属性和函数属性。
2> getattr(obj,name) #获取obj.name的结果,如果是函数属性,则加上()即可运行函数。
3> setattr(obj,name,value) #新增或者修改obj.name,且值设置为value
4> delattr(obj,name) #删除obj.name属性
还有三种内置方法:
1> __getattr__(self, item) #当self.item不存在时则触发此函数
2> __setattr__(self, key, value) #当要给设置属性值时触发
3> __delattr__(self, item) #删除某个属性时触发
上面这些属性中最重要的就是__getattr__(self,item)用途最广,用于通过组合方式完成授权。

来段代码吧:
改写文件处理中的write方法:

import time
class Filehandle:
    def __init__(self,filename,mode='r',encoding='utf-8'):
        self.file=open(filename,mode,encoding=encoding)
        self.mode=mode
        self.encoding=encoding
    def write(self,content):
        tm=time.strftime('%Y-%m-%d %X')
        self.file.write('%s %s' %(tm,content))
    def __getattr__(self, item): #如果直接 f.read()就会触发此处的方法,调用open函数自带的read方法。
        return getattr(self.file,item)

f=Filehandle('ownerfile','w',encoding='utf-8')
f.write('hello')

此时打开ownerfile文件的内容是:
          2024-08-05 09:09:48 hello

怎么样?就问你牛逼不牛逼!哈哈哈

标签:__,反射,obj,name,item,python,self,encoding,面向对象
From: https://www.cnblogs.com/kkbest/p/18317598

相关文章

  • Python的小技巧
    整个集合大概是按照难易程度排序,简单常见的在前面,比较少见的在最后。1.1拆项>>>a,b,c=1,2,3>>>a,b,c(1,2,3)>>>a,b,c=[1,2,3]>>>a,b,c(1,2,3)>>>a,b,c=(2*i+1foriinrange(3))>>>a,b,c(1,3,5)>......
  • 面向对象的编码设计原则
    之前谈DDD时提及过当下很多标榜面向对象的语言,却是以面向过程来实现的问题。这里就从编码设计的角度来顺一下面向对象设计的一些思维。其实就像我正在梳理的设计模式一样,都是些老生常谈的东西,可是往往在实践的时候,这些老生常谈的东西会被“反刍”,总会有种常看常新的感觉。面向对......
  • VSCode 远程容器默认 python 解释器
    我有一个dockerfile来创建一个带有miniconda的容器并安装一些软件包(此处已修剪):FROMcontinuumio/miniconda3:4.11.0#installthenecessarypackagesRUNcondainstall-cconda-forgepython=3.10.4\ipykernel=6.13.0\numpy=1.22.3ENVAPP_DIR/appWORKDIR......
  • Python mido 未检测到 Raspberry Pi 中的键盘输入
    我有一个简单的python代码,它通过连接到PC的USB从音乐键盘获取MIDI信号,然后将命令发送到Arduino板以写入其数字输出。这工作得很好,没有任何问题。我尝试将相同的代码迁移到RaspberryPi,并进行一些特定于Pi的修改。我的代码如下:importpygameimportmidoimportr......
  • Python 初学者,遇到简单数学问题
    我必须做一个数学练习,要求我以10^-5的幅度构建√3。使用扫描方法和Python。我是法国人,所以我不知道是否“扫描”是正确的词。在练习的前面,我得到了一些提示:√3是方程x^2-3=0的解,我需要达到x*的点y是负数所以我尝试了这个:x=1y=1+10......
  • python字典
    字典概念一种数据结构,用于储存键值对键:值=key:value键会有对应的值,键是用来查找值的(字→键,释义→值)字典名={}要在字典里放入多个键值对,就用"{}"把它们包住,键和值之间用":"表示对应,键值对之间用","分隔。用法如果我们要获取某个键的值,在字典名后面跟方括......
  • python+flask计算机毕业设计健康管理系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,随着人们生活水平的提高和健康意识的增强,健康管理已成为社会关注的焦点。传统的健康管理方式往往依赖于纸质记录和医生的口头建议,这......
  • python+flask计算机毕业设计实验室信息化管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今快速发展的科技时代,实验室作为科研与教学的核心场所,其管理效率和信息化水平直接影响到研究成果的质量和速度。传统的实验室管理方式......
  • python+flask计算机毕业设计中国诗词鉴赏网站(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景中国诗词作为中华文化的重要组成部分,承载着千年的历史与文化底蕴。从古至今,诗词一直是文人墨客表达情感、描绘景象的重要工具。然而,随着时......
  • python+flask计算机毕业设计装修公司管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,随着城市化进程的加速和人们生活水平的提高,装修行业迎来了前所未有的发展机遇。然而,传统装修公司管理方式存在诸多弊端,如信息不透明......