Python关于反射的实例代码分享

 更新时间:2020年02月20日 15:04:36   作者:w_boy  
在本篇文章里小编给大家整理的是一篇关于Python关于反射的实例代码分享,有需要的朋友们可以参考下。

反射

在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学习之反射内容请搜素脚本之家以前的文章或下面相关文章,希望大家以后多多支持脚本之家!

相关文章

  • 基于pytorch的lstm参数使用详解

    基于pytorch的lstm参数使用详解

    今天小编就为大家分享一篇基于pytorch的lstm参数使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Tensorflow2.10使用BERT从文本中抽取答案实现详解

    Tensorflow2.10使用BERT从文本中抽取答案实现详解

    这篇文章主要为大家介绍了Tensorflow2.10使用BERT从文本中抽取答案实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 用python将pdf转化为有声读物

    用python将pdf转化为有声读物

    大家好,本篇文章主要讲的用python将pdf转化为有声读物,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程

    赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程

    这篇文章主要介绍了如果利用python抢购京东茅台,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • 如何写好 Python 的 Lambda 函数

    如何写好 Python 的 Lambda 函数

    这篇文章主要介绍了如何写好 Python 的 Lambda 函数,Lambda 函数是 Python 中的匿名函数,下面文章通过介绍Lambda 函数的相关内容展开文章主题,需要的小伙伴可以参考一下
    2022-03-03
  • python嵌套字典比较值与取值的实现示例

    python嵌套字典比较值与取值的实现示例

    这篇文章主要给大家介绍了关于python嵌套字典比较值与取值的实现方法,详细介绍了python字典嵌套字典的情况下获取某个key的value的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-11-11
  • 浅谈Python编程中3个常用的数据结构和算法

    浅谈Python编程中3个常用的数据结构和算法

    这篇文章主要介绍了浅谈Python编程中3个常用的数据结构和算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • python playwright--pytest-playwright、pytest-base-url插件编写用例

    python playwright--pytest-playwright、pytest-base-url插件编

    这篇文章主要介绍了python playwright--pytest-playwright、pytest-base-url插件编写用例,它提供上下文隔离,开箱即用地在多个浏览器配置上运行,它继承了pytest框架,以及支持playwright的一些基础使用,需要的朋友可以参考下
    2023-05-05
  • 跟老齐学Python之使用Python查询更新数据库

    跟老齐学Python之使用Python查询更新数据库

    前面我们讲述了使用python操作数据库,今天我们来更进一步,介绍下python查询、更新数据库的相关操作。有需要的小伙伴自己参考下吧。
    2014-11-11
  • python中nan与inf转为特定数字方法示例

    python中nan与inf转为特定数字方法示例

    这篇文章主要给大家介绍了将python中nan与inf转为特定数字的方法,文中给出了详细的示例代码和运行结果,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05

最新评论