Python关于反射的实例代码分享


Posted in Python onFebruary 20, 2020

反射

在Python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射。

函数与方法

内建函数:

getattr(object,name[,degault]) 通过name返回object的属性值,当属性不存在,将使用default返回,如果没有default,则抛出AttributeError。Name必须为字符串。

setattr(object,name,value) object的属性存在,则覆盖,不存在,新增。

hasattr(object,name) 判断对象是否有这个名字的属性,name必须为字符串

介绍了基本知识点,我们来看下实例代码:

#!/usr/bin/env python
#-*-coding:utf8-*-

def bulk(self):
  print("%s is jiao ...."%self.name)

class Dog(object):
  def __init__(self,name):
    self.name=name

  def eat(self,food):
    print("%s is eating ...."%self.name,food)

d= Dog("dfxa")
choice = input(">>:").strip()

if hasattr(d,choice): #判断一个d(对象)里是否有对应的choice字符串方法

  # delattr(d,choice) # Deletes the named attribute from the given object.
  # delattr(x, 'y') is equivalent to ``del x.y''
  # 相当于 del d.choice

   func = getattr(d,choice) #根据字符串去获取d对象里的对应方法的内存地址
   func("cheng")
  # attr = getattr(d,choice)
  # setattr(d,choice,"drr")

else:
  # 将给定对象的命名属性设置为指定值
  setattr(d,choice,22) # choice是字符串,相当于 d.choice = z
  print(getattr(d,choice))
print(d.name)

第二短代码:

def bulk(self):
  print("%s is jiao ...."%self.name)

class Dog(object):
  def __init__(self,name):
    self.name=name

  def eat(self,food):
    print("%s is eating ...."%self.name,food)

d= Dog("dfxa")
choice = input(">>:").strip()

if hasattr(d,choice): #判断一个d(对象)里是否有对应的choice字符串方法
   func = getattr(d,choice) #根据字符串去获取d对象里的对应方法的内存地址
   func("cheng")
  #不能直接print(d.choice) ,choice是一个字符串,应该按照下面的方法写
  # attr = getattr(d,choice)
  # print(attr)

else:
   setattr(d,choice,bulk)
   # 运行程序,输入talk相当于 d.talk = bulk,把bulk的内存地址赋给了talk
   # 此时函数就是talk,talk() == 调用bulk()
   #d.talk(d) #所以这里只能调用talk()
   #动态的把类外面的方法装配到类里,通过字符串的形式,但调用需要把自己(对象)传进去
   #这样的话就把函数写死了,另一种写法
   func2 = getattr(d,choice)
   func2(d) #这样不管输入的是talk还是bulk都可以

>>:talk

dfxa is jiao ....

到此这篇关于Python关于反射的实例代码分享的文章就介绍到这了,更多相关Python学习之反射内容请搜素三水点靠木以前的文章或下面相关文章,希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python批量修改文件后缀的方法
Jan 26 Python
python处理cookie详解
Feb 07 Python
详解Python中的各种函数的使用
May 24 Python
详解Python中的日志模块logging
Jun 19 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
详解python校验SQL脚本命名规则
Mar 22 Python
python 杀死自身进程的实现方法
Jul 01 Python
python文字转语音实现过程解析
Nov 12 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
python实现批处理文件
Jul 28 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 Python
Python3监控疫情的完整代码
Feb 20 #Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 #Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 #Python
Python sys模块常用方法解析
Feb 20 #Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 #Python
pytorch ImageFolder的覆写实例
Feb 20 #Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 #Python
You might like
对javascript和select部件的结合运用
2006/10/09 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
php实现计数器方法小结
2015/01/05 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
拖动时防止选中
2017/02/03 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
浅谈vue权限管理实现及流程
2020/04/23 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
大型活动组织方案
2014/05/10 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
农行心得体会
2014/09/02 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
深度学习详解之初试机器学习
2021/04/14 Python
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang