day7_python之面向对象高级-反射
反射:通过字符串去找到真实的属性,然后去进行操作
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
1、两种方法访问对象的属性
class Foo:
x=1
def __init__(self,name):
self.name=name def f1(self):
print('from f1') f=Foo('egon')
print(f.__dict__)
方式一:访问那么对应的值
print(f.name)
方式二:
print(f.__dict__['name'])
2、反射
2.1、hasattr判断属性
class Foo:
x = 1 def __init__(self, name):
self.name = name def f1(self):
print('from f1') f = Foo('egon')
print(hasattr(f, 'name')) # f.name 判断f对象里有没有name这个属性,一定得是字符串形式的name
print(hasattr(f, 'f1')) # f.f1
print(hasattr(f, 'x')) # f.x
2.2、setattr 设置属性
class Foo:
x = 1
def __init__(self, name):
self.name = name def f1(self):
print('from f1')
f = Foo('egon') setattr(f,'age',18)#f.age=18 给f设置一个age属性
print(f.age)
2.3、getattr 获取属性
class Foo:
x = 1
def __init__(self, name):
self.name = name def f1(self):
print('from f1')
f = Foo('egon') print(getattr(f,'name'))#f.name
print(getattr(f,'abc',None))#f.abc
print(getattr(f,'name',None))#f.abc func = getattr(f, 'f1') # f.f1
print(func)
func()
2.4、delattr 删除属性
class Foo:
x = 1
def __init__(self, name):
self.name = name def f1(self):
print('from f1')
f = Foo('egon')
delattr(f,'name')# del f.name
print(f.__dict__)
3、反射的用法
class Ftpserver:
def __init__(self, host, port):
self.host = host
self.port = port def run(self):
while True:
cmd = input('>>: ').strip()
if not cmd: continue
if hasattr(self, cmd): # 首先判断self(对象)里有没有用户输入的功能
func = getattr(self, cmd) # 用户输入的命令是个字符串,应该把字符串反射到正真的属性上
func() def get(self):
print('get func') def put(self):
print('put func') f = Ftpserver('192.168.1.2', 21)
f.run()
day7_python之面向对象高级-反射的更多相关文章
- CSIC_716_20191129【面向对象高级----反射、类的内置方法(魔法方法)、单例模式】
反射 反射是通过'字符串'对 对象的属性进行操作,反射有四个内置的方法. hasattr 通过字符串 判断对象的属性或者方法是否存在 getattr 通过字符串 获取对象的属性或者方法 ...
- Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)
上节课复习:1.编程思想 面向过程 核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...
- 简学Python第七章__class面向对象高级用法与反射
Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群 群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...
- python高级之面向对象高级
python高级之面向对象高级 本节内容 成员修饰符 特殊成员 类与对象 异常处理 反射/自省 单例模式 1.成员修饰符 python的类中只有私有成员和公有成员两种,不像c++中的类有公有成员(pu ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- 第五篇:python高级之面向对象高级
python高级之面向对象高级 python高级之面向对象高级 本节内容 成员修饰符 特殊成员 类与对象 异常处理 反射/自省 单例模式 1.成员修饰符 python的类中只有私有成员和公有成员两 ...
- Python 面向对象之反射
Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- C++面向对象高级编程(八)模板
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 这节课主要讲模板的使用,之前我们谈到过函数模板与类模板 (C++面向对象高级编程(四)基础篇)这里不再说明 1.成员模板 成员模板:参数为tem ...
随机推荐
- 想真正了解JAVA设计模式看着一篇就够了。 详解+代码实例
Java 设计模式 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结 设计模式分为 23 种经典的模式,根据用途我们又可以分为三大类.分别是创建型模式.结构型模式和行为型模式 列举几种设 ...
- Vue. 之 Element table 单元格内容隐藏
Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...
- git pull 总提示让输入merge 信息
在生产环境拉去代码的时候,总是出现了 .git/MERGE_MSG,很烦. 虽然每次可以通过输入 :q 命令,取消,然后完成拉取.但是这样就很影响效率.解决办法一: 欺骗自己法只要我没看见这个问题,这 ...
- leetcode 31-40 easy
38.Count and Say The count-and-say sequence is the sequence of integers with the first five terms as ...
- python实现六大分群质量评估指标(兰德系数、互信息、轮廓系数)
python实现六大分群质量评估指标(兰德系数.互信息.轮廓系数) 1 R语言中的分群质量--轮廓系数 因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评 ...
- 【JZOJ3215】【SDOI2013】费用流
╰( ̄▽ ̄)╭ 对于一张给定的 运输网络 ,Alice 先确定一个最大流 ,如果有多种解, Alice 可以任选一种: 之后 Bob在每条边上分配单位花费 (单位花费必须是非负实数), 要求所有边的单 ...
- python ndarray相关操作:重构
- prestashop 首页轮播幻灯片图片修改
后台 -> Modules -> Modules 搜索 home(中文则搜幻灯片)
- PHP定时任务获取微信access_token的方法
一.使用brew安装php多版本方法 # brew install php56# brew install php70二.安装切换工具 # brew install php-version# sour ...
- MSSQL 为db创建user
use [IBatisNet]GO if not exists (select * from master.dbo.syslogins where loginname = N'IBatisNet')B ...