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获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
python3使用diagrams绘制架构图的步骤
Apr 08 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 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript iframe编程相关代码
2009/12/28 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Django发送邮件功能实例详解
2019/09/02 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
关于python中remove的一些坑小结
2021/01/04 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
大学生通用个人自我评价
2014/04/27 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
基层组织建设年活动总结
2015/05/09 职场文书