day28 反射 属性操作 getattr hasattr setattr delattr
反射
用字符串来对应其同名的属性或者方法,通过某种方法调用这个字符串来执行方法或者获取属性
网络编程的时候非常好用,是很重要的内容 先看个示例吧:
class Teather:
dic = {
"查看学生信息":"show_student",
"查看讲师信息":"show_teacher"
} def show_student(self):
print("学生:羊驼") def show_teacher(self):
print("讲师:羊驼") @classmethod
def func(cls):
print("ahahah") alex = Teather()
for k in Teather.dic:
print(k)
key = input("请输入指令:")
print(Teather.dic[key]) # 查看讲师信息 # 输出具体指令
print(type(Teather.dic[key])) # <class 'str'> # 字符串类型
getattr(alex,Teather.dic[key])() # 讲师:羊驼 # 通过字符串反射到同名方法执行得出结果
具体用到的方法:
hassattr 判断属性或者方法是否存在
getattr 字符串反射属性或者方法
delattr 删除属性
setattr 创建属性,如果存在则重新赋值,不存在则创建后赋值
class A():
def __init__(self,name):
self.name = name def hi(self):
return f"hi~{self.name}~" a = A(name="lala")
print(hasattr(a,"name")) # True # 创建后存在此属性了
print(a.name) # lala
print(a.hi()) # hi~lala~ delattr(a,"name")
print(hasattr(a,"name")) # False # 删除属性后不存在此属性了
# print(a.name) # AttributeError: 'A' object has no attribute 'name'
# delattr(a,"hi") # AttributeError: hi # 不能删除对象的方法
print(a.hi()) # 删除了属性并不会影响这个实例调用其本就可以调用的其他方法,仅仅是失去那个属性 # a.name = "haha" # 直接创建赋值这样感觉最简单最方便
setattr(a,"name","haha") # setattr 其实和上面是等效的,但是用起来还麻烦些.
setattr(a,"age",19) # setattr 也可以做到创建未存在的属性不存在则添加并赋值
print(a.name) # haha
print(a.age) # str = "hi"
if hasattr(a,str): # 判断一下是否存在这个属性或者方法
print(getattr(a,str)()) # hi~haha~ # 从字符串反射过去方法执行结果
day28 反射 属性操作 getattr hasattr setattr delattr的更多相关文章
- Python笔记【7】_反射getattr&hasattr&setattr&delattr
Lesson0402_GetatrrWebsite.py #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctr ...
- Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)
一.异常处理 python异常: python的运行时错误称作异常 (1)语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 (2)逻辑错误:由于不完整或不合法的输入所致,也可能是逻 ...
- (转)Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)
原文:http://www.cnblogs.com/xiaozhiqi/p/5778856.html https://blog.csdn.net/zong596568821xp/article/det ...
- 反射(hasattr和getattr和setattr和delattr)
目录 一.反射在类中的使用 1.1 应用 二.反射在模块中的使用 2.1 前言 2.2 反射机制 2.2.1 getattr() 2.2.2 hasattr(object, name) 2.2.3 s ...
- C# 反射之属性操作
一.反射-类操作 //1.获取对象所有的属性名 Student stu = new Student(); //获取当前类名称 Console.WriteLine(stu.GetType().Name) ...
- python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)
主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数. hasattr(object,name) 判断object中是否有name字符串对应的属性或方法,返回Tr ...
- Python 反射机制之hasattr()、getattr()、setattr() 、delattr()函数
反射机制 先看看我对Java中反射机制的通俗理解:反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化 ...
- isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)
6.23 自我总结 面向对象的高阶 1.isinstance/type/issubclass 1.type 显示对象的类,但是不会显示他的父类 2.isinstance 会显示的对象的类,也会去找对象 ...
- hasattr、getattr、setattr、delattr、反射
目录 hasattr getattr setattr delattr 反射的应用 __import__(了解) 思考: 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对 ...
随机推荐
- go get 碰壁怎么办?
如果要让go get顺利进行,必须注意2个问题: 1.墙:2.墙: 解决办法是安装和配置shadowsocks和polipo.shadowsocks是socks5协议,polipo是将sock ...
- MIUI7 系统应用精简(米5、红米note3)
1.由于安装的部分应用在root后无法使用,所以自己一直不能使用MIUI的开发版本. 2.前段时间米5升级MIUI8,实在是用着不咋地,耗电,王者还掉帧,于是降级miui7 3.被逼走上了刷机路. 1 ...
- 【Linux系统目录结构】
登录系统后,在当前命令窗口下输入 ls / 你会看到 以下是对这些目录的解释: /bin bin是Binary的缩写.这个目录存放着最经常使用的命令. /boot 这里存放的是启动Linux时使用的一 ...
- 计算2个时间之间经过多少Ticks
Ticks是一个周期,存储的是一百纳秒,换算为秒,一千万分之一秒.我们需要计算2个时间之间,经过多少Ticks,可以使用下面的方法来实现,使用2个时间相减. 得到结果为正数,是使用较晚的时间减去较早的 ...
- vue 中使用 async/await 将 axios 异步请求同步化处理
1. axios 常规用法: export default { name: 'Historys', data() { return { totalData: 0, tableData: [] } }, ...
- slurm.conf系统初始配置
#slurm集群配置 ##集群名称 ClusterName=myslurm ##主控制器的主机名 ControlMachine=node11 ##主控制器的IP地址 ControlAddr=192.1 ...
- Linux下FastDFS分布式存储-总结及部署记录
一.分布式文件系统介绍分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系 ...
- php 中 opendir() readdir() scandir()
opendir(path,context)若成功,则该函数返回一个目录流,否则返回 false 以及一个 error.可以通过在函数名前加上 “@” 来隐藏 error 的输出. readdir() ...
- 快速搭建BIND服务,并实现解析
公司有测试需求,当连接一个网络后自动会进入产品的测试环境,所以搭建了一个DNS解析服务,来完成此需求. 参考:http://blog.chinaunix.net/uid-30149335-id-506 ...
- M1m2分析报告
个人博客链接: http://www.cnblogs.com/kjzxzzh/p/4074386.html http://www.cnblogs.com/kjzxzzh/p/4027699.html ...