python---反射详解
反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Dog( object ): def __init__( self ,name): self .name = name def eat( self ): print ( "%s is eating..." % self .name) def run(): print ( "runing ...." ) d = Dog( "lucy" ) choise = input ( "请输入要调用的方法:" ) if hasattr (d,choise): #判断一个对象是否有对应的字符串方法 func = getattr (d,choise) #根据字符串去获取对象里相应的方法或属性的内存地址对象 func() else : setattr (d,choise,run) #setattr(obj,y,fun)相当于obj.y=fun,fun可以是属性或者方法 v = getattr (d,choise) print (v) |
dir([obj]):
调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。
hasattr(obj, attr):
这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。
getattr(obj, attr):
调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为'bar',则返回obj.bar。
setattr(obj, attr, val):
调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为'bar',则相当于obj.bar = val。
__doc__ 查看尖的描述信息
__module__表示当前操作的对象所在的模块
__class__表示当前操作的对象所属的类
__init__构造方法 通过类创建对象自动执行
__del__析构方法,当前对象在内存中被释放自动斩妖执行
__call__对象后面加括号触发执行
__dict__查看类或对象中的成员
__str__如果一个类中定义了此方法,那么打印此类对象时,输出此方法的返回值
__getitem__当类中定义了一个字典的属性成员,可以获取
__setitem__设置修改类中字典的数据
__delitem__删除 类中字典的数据
__metalass__其用来表示该类由 谁 来实例化创建
__new__触发 __init__创建实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
from lib.ss import a #示例类 dog class doges( object ): """类的描述信息""" def __init__( self ,name,food): self .name = name self .food = food self .data = {} #定义一个类的字典 def __call__( self , * args, * * kwargs): #对象后面加括号解执行 print ( * args) def __str__( self ): #默认输出返回值 return self .name def __getitem__( self ): #可以获取类的的字典 return self .data def __setitem__( self , key, value): #可以设置类的的字典 self .data[key] = value def __delitem__( self , key): #可以删除类的字典的内容 del self .data[key] dog = doges( 'xxx' , 'iii' ) print (dog.__doc__) b = a() print (b.__module__) #操作的对象的那个模块 print (dog.__class__) #当前操作的对象的类是什么 dog( '111' ) # print (doges.__dict__) #查看类或对象的成员 类只打印类的成员不打印对象的成员 print (dog.__dict__) #查看类或对象的成员 对象只打印对象的成员不打印类的成员 print (dog) #打印 __str__的返回值 print (dog.__str__()) #打印返回值 dog[ '1' ] = 1000 #触发.__setitem__() dog[ '2' ] = 1000 #触发.__setitem__() print (dog.__getitem__()) print (dog.__delitem__( '1' )) #删除类中字典 print (dog.__getitem__()) #设置类的特殊方法 def func( self ): print ( 'hello word%s' % self .name) print () def __init__( self ,name,age): self .name = name self .age = age ##type参数 1:类名 2.类的基类 3.类的成员,字典格式 CAT = type ( 'CAT' ,( object ,),{ 'func' :func, '__init__' :__init__}) cat = CAT( '喵喵' , 3 ) cat.func() print (cat.name,cat.age) |
python---反射详解的更多相关文章
- Python面试题之Python反射详解
0x00 前言 反射,可以理解为利用字符串的形式去对象中操作成员属性和方法 反射的这点特性让我联想到了exec函数,也是把利用字符串的形式去让Python解释器去执行命令 Python Version ...
- Python闭包详解
Python闭包详解 1 快速预览 以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >> ...
- [转] Python Traceback详解
追莫名其妙的bugs利器-mark- 转自:https://www.jianshu.com/p/a8cb5375171a Python Traceback详解 刚接触Python的时候,简单的 ...
- C#反射の反射详解
C#反射の反射详解(点击跳转)C#反射の反射接口(点击跳转)C#反射反射泛型接口(点击跳转)C#反射の一个泛型反射实现的网络请求框架(点击跳转) 一.什么是反射 反射(Reflection):这是.N ...
- python 数据类型详解
python数据类型详解 参考网址:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8 ...
- Python 递归函数 详解
Python 递归函数 详解 在函数内调用当前函数本身的函数就是递归函数 下面是一个递归函数的实例: 第一次接触递归函数的人,都会被它调用本身而搞得晕头转向,而且看上面的函数调用,得到的结果会 ...
- python线程详解
#线程状态 #线程同步(锁)#多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题. #threading模块#常用方法:'''threadin ...
- python数据类型详解(全面)
python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...
- Python Collections详解
Python Collections详解 collections模块在内置数据结构(list.tuple.dict.set)的基础上,提供了几个额外的数据结构:ChainMap.Counter.deq ...
- python生成器详解
1. 生成器 利用迭代器(迭代器详解python迭代器详解),我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记 ...
随机推荐
- 从零开始搭建django前后端分离项目 系列三(实战之异步任务执行)
前面已经将项目环境搭建好了,下面进入实战环节.这里挑选项目中涉及到的几个重要的功能模块进行讲解. celery执行异步任务和任务管理 Celery 是一个专注于实时处理和任务调度的分布式任务队列.由于 ...
- SpringBoot集成Shiro安全框架
跟着我的步骤:先运行起来再说 Spring集成Shiro的GitHub:https://github.com/yueshutong/shiro-imooc 一:导包 <!-- Shiro安全框架 ...
- Asp.Net Core实战(干货)
序言 使用.NET Core,团队可以更容易专注的在.net core上工作.比如核心类库(如System.Collections)的更改仍然需要与.NET Framework相同的活力,但是ASP. ...
- [WPF]何如在Win7使用Aero2主题
1. 问题 假设我在Windows10的环境新建一个4.6的WPF项目,添加一个ComboBox,并用Blend在这个ComboBox上右键"编辑模板"->"编辑副 ...
- Day9 Python基础之函数基础(七)
参考链接:https://www.cnblogs.com/yuanchenqi/articles/5828233.html 1.函数的定义 定义: 函数是指将一组语句的集合通过一个函数名封装起来,要想 ...
- 墨者学院——密码学加解密实训(Base64转义)
地址:https://www.mozhe.cn/bug/detail/SW5ObnVFa05vSHlmTi9pcWhRSjRqZz09bW96aGUmozhe 在靶场中找到内容 解密 访问直接得key
- anaconda + VSCode + 生产环境配置
1. 修改jupyter notebook 默认路径: 进入anaconda 命令行, jupyter notebook --generate-config 生成配置文件, 该文件在 本机用 ...
- CSS3 transform-style 属性
语法 transform-style: flat | preserve-3d 语法项目 说明 初始值 flat 适用于 块元素和行内元素 可否继承 ...
- Python 基础知识----数据类型
一.Number 类型(数值类型) 二.String 类型 (字符串类型) 三.List 类型 (列表类型) 是一种常用的序列类型簇,List 用中括号 [ ] 表示,不同的元素(任意类型的值)之间以 ...
- git放弃修改,强制覆盖本地代码
$ git fetch --all $ git reset --hard origin/master $ git pull