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__(了解) 思考: 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对 ...
随机推荐
- Vue-Vue文本渲染三种方法 {{}}、v-html、v-text
{{ }} 将元素当成纯文本输出 v-htmlv-html会将元素当成HTML标签解析后输出 v-textv-text会将元素当成纯文本输出 代码: <!DOCTYPE html> < ...
- [Oracle]Master表字段扩张时的对应方法
Master表字段扩张时的对应方法 如果Master表的数据量很大,Master表中的列,宽度扩张了,MVIEW表如何对应处理? 此时,重建MVIEW可能会耗费很长的时间. 可以采用 alter ma ...
- 谈谈ThreadLocal的设计及不足
用Java语言开发的同学对 ThreadLocal 应该都不会陌生,这个类的使用场景很多,特别是在一些框架中经常用到,比如数据库事务操作,还有MVC框架中数据跨层传递.这里我们简要探讨下 Thread ...
- supervisord监控服务必备命令
supervisord(http://supervisord.org/introduction.html)是一个非常优秀的进程管理工具,使用Python开发.它可以在类UNIX系统的方式让用户来准确地 ...
- Rancher + k8s + docker 部署资料
一.k8s 文档: https://jimmysong.io/kubernetes-handbook/concepts/deployment.html 命令行大全 https://kubernetes ...
- C#_委托的使用
C#基础---委托的使用 一:什么是委托 委托是一种定义方法签名的类型当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法.委托是一个引用类型,所以它具 ...
- Oracle数据库设置为归档模式的操作方法
Oracle归档模式非常非常重要!对于有些数据库刚装好后可能是非归档模式,这是很危险的!为了安全起见,一定要谨记:对于Oracle数据库,一定要设置为归档模式,尤其是生产库,只有这样才能实现数据库的有 ...
- linux-流程控制语言
if: for: 增强for循环 while: 统计这个目录下所有文件的大小 编写脚本 执行 help text:
- 矩形A + B HDU2524
题意 给你n*m的棋盘问有多少个矩形 分析 先看只有一行或一列的情况有1+2+....+n个,因为矩形的类型有1个最小单位格子n个,2个最小单位格子n-1个,n个最小单位格子有一个 code #inc ...
- C语言与汇编衔接1
研究实验二 问题研究过程: 发问:C语言中的变量究竟是什么,通过下面的程序进行C语言中的变量的学习 图1 URL.EXE函数 为了研究main函数的首地址,我首先自作聪明的用了一条_DX=main, ...