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脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
Python的time模块中的常用方法整理
Jun 18 Python
Python验证码识别的方法
Jul 10 Python
用Python的Django框架来制作一个RSS阅读器
Jul 22 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
python实现朴素贝叶斯分类器
Mar 28 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python流程控制 while循环实现解析
Sep 02 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 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
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
PHP统计代码行数的小代码
2019/09/19 Python
django实现模型字段动态choice的操作
2020/04/01 Python
2014年创先争优活动总结
2014/05/04 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
五年级语文教学反思
2016/03/03 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL