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 ...
随机推荐
- spark 源码分析之十四 -- broadcast 是如何实现的?
本篇文章主要剖析broadcast 的实现机制. BroadcastManager初始化 BroadcastManager初始化方法源码如下: TorrentBroadcastFactory的继承关系 ...
- .Net Core 通用主机(Core 在控制台应用程序中的应用)
一.介绍 官方文档中说,Microsoft.AspNetCore.App 元包(ASP.NET Core 2.1 或更高版本)包含通用主机的Microsoft.Extensions.Hosting包, ...
- http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片
http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片
- CF543B Destroying Roads 题解
看到没有题解就贡献一波呗 分析: 这题其实就是想让我们求一个图中两条最短路的最短(好把更多的边删掉). 我们先考虑一条最短路,别问我我怎么会的显然,就是s和t跑个最短路再用n-就行. 然后就是两条喽! ...
- 「PowerBI相关」一款极其优秀的DAX建模工具Tabular Editor
做Excel插件开发的时间久了,大部分人的印象是笔者是做软件开发,谈不上软件,也是插件开发级别. 但笔者更希望大家记住的身份是做BI开发,特别是企业级的BI. 故也借着Excel催化剂这个平台,输送一 ...
- C#3.0新增功能09 LINQ 基础06 LINQ 查询操作中的类型关系
连载目录 [已更新最新开发文章,点击查看详细] 若要有效编写查询,应了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. ...
- Cesium 学习(一)环境搭建
网上已有很多文章来教我们搭建Cesium的环境,我也没有必要再写一次:下面是我参照的文章的地址: 1.https://www.cnblogs.com/huqi-code/p/8287403.html ...
- C/C++中指向结构体变量的指针,调用指向的那个结构体中的成员
设p是指向结构体变量的指针,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员 ...
- Python基础之格式化输出、运算符、数字与布尔值互换以及while...else
python是一天学一点,就这样零零碎碎…… 格式化输出 %是占位符,%s是字符串格式,%d整数格式,%f是浮点数格式 name = input('输入姓名') age = input('输入年龄') ...
- 今天来聊Java ClassLoader
背景 类加载机制作为一个高频的面试题经常会在面试中被问到,前几天一个电话面试就问到,之前有了解过,但是没有梳理成自己的体系,所以说的有点凌乱,今天花点时间整理一下,分享给大家同时自己也好好梳理一下,顺 ...