Python3 反射及常用的方法
反射就是通过字符串映射或修改程序运行时的状态、属性、方法
有四个常用方法:
hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
反射Demo举例:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author:CarsonLi、
'''
hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
'''
def bulk(self):
print("%s is yelling"%self.name) class Dog(object):
def __init__(self,name):
self.name=name def eat(self,food):
print("%s is eating %s"%(self.name,food)) jim=Dog("Jim")
choise=input(">>输入需要执行的操作:").strip()
if hasattr(jim,choise):
func=getattr(jim,choise)
func("巧克力")
#delattr(jim,choise)
else:
#动态装配一个方法 choise为方法名,bulk为方法的内存地址
setattr(jim,choise,bulk)
# 调用时用转配的方法名,即传入的choise值,这里需要传入对象本身
getattr(jim,choise)(jim)
#动态装配一个属性,也可以修改属性
setattr(jim,choise,"新装配的属性")
print(getattr(jim,choise))
#print(jim.name)
#jim.eat("狗粮")
Python3 反射及常用的方法的更多相关文章
- Python3的基本数据类型及常用的方法
python3的基本数据类型: 在python3当中有这么几种基本的数据类型:int(整形).str(字符串).list(列表).tuple(元组).dict(字典).bool(布尔值)等.数字整体划 ...
- python3【基础】-字符串 常用的方法
字符串一个最重要的特性就是不可修改. name.capitalize() 首字母大写 name.casefold() 大写全部变小写 name.center(50,"-") 输出 ...
- [Python3 填坑] 014 类的常用魔术方法举例
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...
- 文成小盆友python-num6 -反射 ,常用模块
本次主要内容: 内容补充 python中的反射 常用模块 一,内容补充: 利用上次说到的递归的方法来实现阶乘. 说明:利用函数递归的方法来实现阶乘如: 1*2*3*4*5*6*7 代码实现如下: de ...
- (转)Android之常用功能方法大集合
这些,都是Andorid中比较常用的方法和功能,在网上搜集整理一下记录之,以备不时之需.由于经过多次转载,源文作者不确凿,在此申明,敬请见谅.不得不赞,非常实用. 1.判断sd卡是否存在 boolea ...
- python字符串常用的方法解析
这是本人在学习python过程中总结的一些关于字符串的常用的方法. 文中引用了python3.5版本内置的帮助文档,大致进行翻译,并添加了几个小实验. isalnum S.isalnum() -> ...
- day27:反射和双下方法
1, # 面向对象的三大特性:继承,多态和封装 # 继承: # 单继承: **** # 父类(超类,基类) # 子类(派生类) 派生方法和派生属性 # 子类的对象在调用方法和属性:先用自己的,自己没有 ...
- Python3.x:常用基础语法
Python3.x:常用基础语法 1,if else语句: 不执行if内的语句,需要用:pass if i>2: #跳过不执行 pass else: print("i= %s" ...
- Python语言学习:列表常用的方法
python 列表常用的方法 1.append( ):用于在列表末尾添加新的对象 list.appent(obj) #obj:添加到列表末尾的对象 #!/usr/bin/python aList = ...
随机推荐
- SQL入门之多表查询
如果查询需要针对两个或者更多个表,则在需要涉及到表的连接操作(join). 0.笛卡儿积 最简单的连接方式是直接在from子句中加入两个表,并且用join操作符隔开.形式为Table1 join Ta ...
- 【明哥报错簿】之【inside the host appBase has been specified, and will be ignored】和【did not find a matching property.】
tomcat启动时有时候会报一些警告,项目有时候也是可以正常运行.但是警告出现还是要找到原因消灭掉,两个典型的警告解决办法如下: 1.[inside the host appBase has been ...
- JVM堆内存控制/分代垃圾回收
JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后 ...
- 卷积 & 杜教筛
目录 卷积 杜教筛 前言:发现最近都没怎么写博客,,,赶紧发篇以前记的笔记凑凑数 卷积 卷积定义: 如果有数论函数\(f, g\), 那么它们卷积的第\(n\)项为\((f * g) (n)\),设这 ...
- 洛谷 P2195 HXY造公园 解题报告
P2195 HXY造公园 题目描述 现在有一个现成的公园,有\(n\)个休息点和\(m\)条双向边连接两个休息点.众所周知,\(HXY\)是一个\(SXBK\)的强迫症患者,所以她打算施展魔法来改造公 ...
- 解题:HNOI 2012 永无乡
题面 并查集维护连通性,然后暴力启发式合并就完了,记得合并时边DFS边清空数组 #include<cstdio> #include<cstring> #include<a ...
- poj 2176 folding
Description: 就是把一个字符串压尽可能的压缩 #include<iostream> #include<cstring> #include<cstdio&g ...
- 【bzoj4571】美味
Portal -->bzoj4571 Solution emmm持续智力康复.. 虽然说因为统计的是加上\(x\)的跟\(b\)异或的最大值所以可持久化trie用不了了 但是按位贪心的思想还 ...
- mysql三-1:存储引擎
一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型 ...
- 用一次FastDFS
FastDFS c编写的分布式文件系统,用于搭建文件服务器集群提供文件的上传.下载 特点 冗余备份 负载均衡 线性扩容 高性能.高可用 FastDFS架构 Tracker server 负载均衡和调度 ...