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使用matplotlib的pie函数绘制饼状图功能示例
Jan 08 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
PyQt实现界面翻转切换效果
Apr 20 Python
自学python的建议和周期预算
Jan 30 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
python实现吃苹果小游戏
Mar 21 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
python支持多继承吗
Jun 19 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
python 调用js的四种方式
Apr 11 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
PHP新手上路(十)
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
python处理cookie详解
2014/02/07 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
主管职责范文
2013/11/09 职场文书
普通员工辞职信
2014/01/17 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2015年采购工作总结
2015/04/10 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
小学作文之描写天气
2019/08/15 职场文书
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js