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的迭代器和生成器
Jul 29 Python
Python中functools模块函数解析
Mar 12 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
详解Django定时任务模块设计与实践
Jul 24 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
对python中assert、isinstance的用法详解
Nov 27 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
python制作微博图片爬取工具
Jan 16 Python
PO模式在selenium自动化测试框架的优势
Mar 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
php Session无效分析资料整理
2016/11/29 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python中生成Epoch的方法
2017/04/26 Python
Django的信号机制详解
2017/05/05 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
flask中过滤器的使用详解
2018/08/01 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
对python中的装包与解包实例详解
2019/08/24 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
Java程序员综合测试题
2014/04/25 面试题
幼儿园园长自我鉴定
2013/10/22 职场文书
消费者投诉书范文
2015/07/02 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript