Python3 反射
反射
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 反射的更多相关文章
- Python3 反射及常用的方法
反射就是通过字符串映射或修改程序运行时的状态.属性.方法 有四个常用方法: hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法 getattr(obj,na ...
- python3反射解析
python反射解析 一. 简介 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某 ...
- python3反射
class Cmd:# def __init__(self,name):# self.name = name def run(self): while 1: cmd = input('>> ...
- 循序渐进Python3(六) -- 初识内置变量、反射、递归
#python用下划线作为变量前缀和后缀指定特殊变量.稍后我们会发现, #对于程序来说,其中的有些变量是非常有用的,而其他的则是未知或者无用的. #我们总结一下Python中下划线的特殊用法 ...
- python3之异常处理,断言和反射
1.异常基础 python在运行过程中,程序解释机制会测试代码,如检测不通过则会抛出异常. try: aa = 10 bb = ' cc = aa + bb except Exception as e ...
- python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法
一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstan ...
- Python3学习之路~7.3 反射
python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,该四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...
- Python3 中类的反射
1.针对类中方法的反射 # 反射的使用 class Dog(object): def __init__(self,name): self.name = name def eat(self): prin ...
- Python(六)面向对象、异常处理、反射、单例模式
本章内容: 创建类和对象 面向对象三大特性(封装.继承.多态) 类的成员(字段.方法.属性) 类成员的修饰符(公有.私有) 类的特殊成员 isinstance(obj, cls) & issu ...
随机推荐
- 50行Python代码,教你获取公众号全部文章
> 本文首发自公众号:python3xxx 爬取公众号的方式常见的有两种 - 通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章 - 通过微信公众号的素材管理,获取公众号文章.缺点是需要申请自 ...
- 嵊州D2T2 八月惊魂 全排列 next_permutation()
嵊州D2T2 八月惊魂 这是一个远古时期的秘密,至今已无人关心. 这个世界的每个时代可以和一个 1 ∼ n 的排列一一对应. 时代越早,所对应的排列字典序就越小. 我们知道,公爵已经是 m 个时代前的 ...
- Java内部类你真的会吗?
一.四种内部类 1.1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: public class OuterAndInnerClass { public sta ...
- JAVA包装类解析和面试陷阱分析
包装类 什么是包装类 虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎 ...
- 一个内存不能被written的问题
C程序面试中曾经面试过这样一道题: #include <stdio.h> int main() { char *p = "12345"; *p = '6'; print ...
- Java编程思想:File类getCanonicalFile()方法,listFile()方法
import java.io.IOException; import java.util.*; import java.util.regex.Pattern; import java.io.File; ...
- 从后端到前端之Vue(二)写个tab试试水
上一篇写了一下table,然后要写什么呢?当然是tab了.动态创建一个tab,里面放一个table,这样一个后台管理的基本功能(之一)就出来了. 好吧,这里其实只是试试水,感受一下vue的数据驱动可以 ...
- python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal
6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...
- 洛谷P3905 道路重建
题目:https://www.luogu.org/problemnew/show/P3905 分析: 此题是显然的最短路算法,只是看到一起删掉的一堆边感到十分棘手,而且还要求出的是最短添加边的总长度 ...
- 从微信小程序开发者工具源码看实现原理(二)- - 小程序技术实现
wxml与wxss的转换 1.wxml使用wcc转换 2.wxss使用wcsc转换 开发者工具主入口 视图层页面的实现 视图层页面实现技术细节 视图层快速打开原理 视图层新打开页面流程 业务逻辑层页面 ...