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实现简单的socket server实例
Apr 29 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
Python中if elif else及缩进的使用简述
May 31 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
Python 20行简单实现有道在线翻译的详解
May 15 Python
python如何制作英文字典
Jun 25 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python库matplotlib绘制坐标图
Oct 18 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python导入库的具体方法
Jun 18 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与javascript的两种交互方式
2006/10/09 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
es6数据变更同步到视图层的方法
2019/03/04 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python读写Excel文件方法介绍
2014/11/22 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
使用python实现tcp自动重连
2017/07/02 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
解决python flask中config配置管理的问题
2019/07/26 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
个人综合鉴定材料
2014/05/23 职场文书
销售求职信范文
2014/05/26 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python
SQL Server实现分页方法介绍
2022/03/16 SQL Server