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实现3行代码解简单的一元一次方程
Aug 18 Python
Python实现从url中提取域名的几种方法
Sep 26 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
itchat接口使用示例
Oct 23 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
python生成n个元素的全组合方法
Nov 13 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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 接口类与抽象类的实际作用
2009/11/26 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
详解jQuery选择器
2016/12/21 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
寄语是什么意思
2014/04/10 职场文书
职代会闭幕词
2015/01/28 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
房屋所有权证明
2015/06/19 职场文书
SQL Server中搜索特定的对象
2022/05/25 SQL Server