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运算符重载用法实例
May 28 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
python实现按日期归档文件
Jan 30 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
Python基础之常用库常用方法整理
Apr 30 Python
Python实现拼音转换
Jun 07 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 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冒泡算法详解(递归实现)
2014/11/10 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
Python实现抢购IPhone手机
2018/02/07 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
中学劳技课教师的自我评价
2014/02/05 职场文书
办公室主任职责范本
2014/03/07 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
PHP实现两种排课方式
2021/06/26 PHP