博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象进阶
阅读量:6435 次
发布时间:2019-06-23

本文共 969 字,大约阅读时间需要 3 分钟。

面向对象进阶

一、反射

1、定义:

  反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。

2、python中的反射

通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

3、可以实现自省的函数:hasattr、getattr、setattr、delattr

①举例

1 class Foo: 2     f = '类的静态变量' 3     def __init__(self,name,age): 4         self.name=name 5         self.age=age 6  7     def say_hi(self): 8         print('hi,%s'%self.name) 9 10 obj=Foo('egon',73)11 12 #检测是否含有某属性13 print(hasattr(obj,'name'))14 print(hasattr(obj,'say_hi'))15 16 #获取属性17 n=getattr(obj,'name')18 print(n)19 func=getattr(obj,'say_hi')20 func()21 22 print(getattr(obj,'aaaaaaaa','不存在啊')) #报错23 24 #设置属性25 setattr(obj,'sb',True)26 setattr(obj,'show_name',lambda self:self.name+'sb')27 print(obj.__dict__)28 print(obj.show_name(obj))29 30 #删除属性31 delattr(obj,'age')32 delattr(obj,'show_name')33 delattr(obj,'show_name111')#不存在,则报错34 35 print(obj.__dict__)

 

转载于:https://www.cnblogs.com/NeroCl/p/8326131.html

你可能感兴趣的文章
Binary search
查看>>
http://jingyan.baidu.com/article/08b6a591f0fafc14a9092275.html
查看>>
MySQL查询数据表的Auto_Increment(自增id)
查看>>
java多线程系类:JUC集合:01之框架
查看>>
【Linux】 源码安装make命令详解,避免踩坑
查看>>
数据库中间表插入乱序
查看>>
[Python爬虫] 之四:Selenium 抓取微博数据
查看>>
使用OPENROWSET爆破SQL Server密码
查看>>
Mac_安装Homebrew以及Maven
查看>>
eclipse web开发Server配置
查看>>
曹政--互联网搜索老师傅
查看>>
MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
查看>>
linux下使用 du查看某个文件或目录占用磁盘空间的大小
查看>>
[wp7软件]wp7~~各种视频播放器下载大全
查看>>
Java工程师必知之事 —— 如何定义自己的职业路线?
查看>>
代码质量与规范,那些年你欠下的技术债
查看>>
计算机程序的思维逻辑 (19) - 接口的本质
查看>>
CVE-2014-4113漏洞利用过程分析
查看>>
解密MSSQL链接数据库的密码
查看>>
Glide-源码详解
查看>>