反射

python面向对象中的反射:通过字符串的形式操作对象相关的属性

hasattr(obj,name)
# hasattr(obj, name)
# 判断一个对象是否有指定的属性name,返回True/False
# name是字符串形式的
class C:
    def __init__(self, x=0):
        self.x = x
c1 = C()
print(hasattr(c1, "x")) #打印 True
print(hasattr(c1, "y")) # 打印 False
print(hasattr(c1, x)) # 报错,NameError:name "x" is not defined
getattr(obj, name[, default = None])
# getattr(obj, name[, default = None])
# 返回对象指定的属性值,如果是特征属性,就是返回变量的数据值,如果是方法属性,即返回函数名
# 如果找不到指定的属性,默认就报错。如果默认部分有设置,就打印默认部分的内容
class C:
    def __init__(self, x=0):
        self.x = x
    def getsize(self):
        print(x)
c1 = C()
print(getattr(c1,"x")) # 打印0
print(getattr(c1, "y")) # 报错
print(getattr(c1,"y","您访问的属性不存在...")) # 打印:您访问的属性不存在...
getattr(c1, "getsize")() # 相当于执行 c1.getsize()函数,打印0
setattr(obj, name, value)
# setattr(obj, name, value)
# 设定对象指定属性的值,如果该属性不存在,就新建这个属性
class C:
    def __init__(self, x=0):
        self.x = x
c1 = C()
setattr(c1, "y", 20)
getattr(c1, "y") # 打印20
delattr(obj, name)
# delattr(obj, name)
# 删除对象中指定的属性,如果该属性存在就默默执行删除,如果不存在就报错

sys.modules[__name__]
  • 反射当前模块成员:变量、函数、类 都可以
  • 如果名字相同,反射最靠近的那个
#demo1:反射函数
import sys
def s1:pass
def s2:pass

hasattr(sys.modules[__name__], "s1")

#demo2: 反射类
import sys
class M1:pass
class M2:pass

hasattr(sys.modules[__name__], "M1")

Python3 反射的更多相关文章

  1. Python3 反射及常用的方法

    反射就是通过字符串映射或修改程序运行时的状态.属性.方法 有四个常用方法: hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法 getattr(obj,na ...

  2. python3反射解析

    python反射解析   一. 简介 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某 ...

  3. python3反射

    class Cmd:# def __init__(self,name):# self.name = name def run(self): while 1: cmd = input('>> ...

  4. 循序渐进Python3(六) -- 初识内置变量、反射、递归

    #python用下划线作为变量前缀和后缀指定特殊变量.稍后我们会发现,   #对于程序来说,其中的有些变量是非常有用的,而其他的则是未知或者无用的.   #我们总结一下Python中下划线的特殊用法  ...

  5. python3之异常处理,断言和反射

    1.异常基础 python在运行过程中,程序解释机制会测试代码,如检测不通过则会抛出异常. try: aa = 10 bb = ' cc = aa + bb except Exception as e ...

  6. python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法

    一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstan ...

  7. Python3学习之路~7.3 反射

    python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,该四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...

  8. Python3 中类的反射

    1.针对类中方法的反射 # 反射的使用 class Dog(object): def __init__(self,name): self.name = name def eat(self): prin ...

  9. Python(六)面向对象、异常处理、反射、单例模式

    本章内容: 创建类和对象 面向对象三大特性(封装.继承.多态) 类的成员(字段.方法.属性) 类成员的修饰符(公有.私有) 类的特殊成员 isinstance(obj, cls) & issu ...

随机推荐

  1. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  2. Spring Boot + Elasticsearch 实现索引批量写入

    在使用Eleasticsearch进行索引维护的过程中,如果你的应用场景需要频繁的大批量的索引写入,再使用上篇中提到的维护方法的话显然效率是低下的,此时推荐使用bulkIndex来提升效率.批写入数据 ...

  3. 使用wincc vbs脚本查找进程及如何运行进程

    使用vbs代码查看某个进程是否在运行,本文要检查的进程名为 QRscan.exe,其代码如下: sub CheckProcess Dim WMI,Objs,Process,ObjSet WMI=Get ...

  4. NET多线程之进程间同步锁Mutex

    Mutex类似于lock.Monitor,都是为了解决多线程环境下,资源竞争导致的访问顺序问题.常见资源竞争有以下情况: 1.单例,如何确保单例: 2.IO文件操作,如果同时又多个线程访问同一个文件会 ...

  5. Mllib数据类型(密集向量和稀疏向量)

    1.局部向量 Mllib支持2种局部向量类型:密集向量(dense)和稀疏向量(sparse). 密集向量由double类型的数组支持,而稀疏向量则由两个平行数组支持. example: 向量(5.2 ...

  6. [原创]MYSQL周期备份shell脚本

    这个脚本是实现阿里云mysql数据库全量周期备份的shell脚本,实现备份数据按一周星期几分开存放.一下是脚本内容: #!/bin/bash echo `date`echo "backup ...

  7. Python基础总结之第二天从变量开始(新手可相互督促)

    hhh 为年薪20万加油ヾ(◍°∇°◍)ノ゙ 一.变量:(变量的命名规则:一般使用字母开头,可以使用下划线连接,以及数字) 正确的变量命名示范:   (尽量使用容易理解什么用途的词语) a1   na ...

  8. 实现跳转的jsp小例子

    <%@page import="java.io.UnsupportedEncodingException"%> <%@ page language="j ...

  9. 阅读nopcommerce startup源码

    创建一个asp.net core项目,可以到到startup类有两个方法 // This method gets called by the runtime. Use this method to a ...

  10. 实战SpringCloud响应式微服务系列教程(第二章)

    接上一篇:实战SpringCloud响应式微服务系列教程(第一章) 1.1.2背压 背压是响应式编程的核心概念,这一节也是我们了解响应式编程的重点. 1.背压的机制 在生产者/消费者模型中,我们意识到 ...