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 命令行参数sys.argv
Sep 06 Python
Python中unittest模块做UT(单元测试)使用实例
Jun 12 Python
Python使用剪切板的方法
Jun 06 Python
利用nohup来开启python文件的方法
Jan 14 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
python super的使用方法及实例详解
Sep 25 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
python openssl模块安装及用法
Dec 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得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
JQuery属性操作与循环用法示例
2019/05/15 jQuery
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python3学习urllib的使用方法示例
2017/11/29 Python
python测试mysql写入性能完整实例
2018/01/18 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python模块的制作方法实例分析
2019/12/21 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
现金会计岗位职责
2013/12/05 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
大学计划书范文800字
2014/08/14 职场文书
党员个人公开承诺书
2014/08/29 职场文书
使用pytorch实现线性回归
2021/04/11 Python