python之反射

python反射方法和基本使用

首先我们要知道什么是反射?
反射: 反射是一种基于基线的事件驱动,它可以通过字符串的形式,导入模块,通过串口的形式,去模块查找指定函数,并执行,利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员。

以上是比较正式的理解,通俗的讲就是通过字符串实现函数的功能。
python中反射有以下4种:

  • getattr(obj[models], str,[,default]) 获取obj或models中是否有预str同名的方法或函数,返回返回值为str同名方法的对象,如果没有则直接报错。通过设置default默认返回值,可以避免出现报错。
  • hasattr(obj[models], str) 判断obj或models中是否有预str同名的方法或函数,返回值为bool值,一般与getatter搭配使用。
  • delattr(obj[class_name], str) 删除obj/类成员的值,str为要删除的成员值。
  • setattr(obj[class_name], str) 设置对象/类成员的值,str为要设置的成员值。

接下来对各个方法的具体使用用例子表示

  • getattr()
    首先我们new两个python文件,common.py和attribute.py

./common.py

def eat():
	print("我在吃饭!")

./attribute.py

import common
def get_eat():
	eat_func = getattr(common, 'eat')
	eat_func()   # 我在吃饭!
	
get_eat()

执行attribute.py中的代码

我在吃饭!

执行eat_func()与直接执行eat()得到的结果是一样的。

  • hasattr()
import common

def is_hasattr():
	is_eat_func = hasattr(common, 'eat')
	print(is_eat_func)	# True

is_hasattr() 

执行is_hasattr函数

True

delattr()setattr()的实现方法是一样的,这两个一般用得也比较少

  • setattr()
def eat(self):
    print("%s今晚吃什么"%self.name)

class Person(object):
    def __init__(self,name):
        self.name = name

person = Person("libai")
setattr(person,"potato",eat)   		# 将eat添加到person对象中,并命名为potato
food.talk(person)               
  • delattr()
class Person(object):
    def __init__(self,name):
        self.name = name
	def eat(self):
	    print("%s今晚吃什么"%self.name)

person = Person("libai")

delattr(p,"name")       # 删除Person类中的name变量

#反射作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值