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中为feedparser设置超时时间避免堵塞
Sep 28 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
浅析python的优势和不足之处
Nov 20 Python
Python Process多进程实现过程
Oct 22 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
Python-openCV开运算实例
Jul 05 Python
pytorch实现手写数字图片识别
May 20 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
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
javascript变量提升和闭包理解
2018/03/12 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python3简单实现微信爬虫
2015/04/09 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
Python中协程用法代码详解
2018/02/10 Python
Django中的ajax请求
2018/10/19 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
运动会演讲稿50字
2014/08/25 职场文书
国庆节慰问信
2015/02/15 职场文书
商务宴会祝酒词
2015/08/11 职场文书