第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Python中的反射机制(reflect)

Python中的反射机制(reflect)

时间:2021-05-29 02:32:18

相关推荐

Python中的反射机制(reflect)

1.区别标识名与看起来相同的字符串

标识名和看起来相同的字符串,两者在字面上看起来一样,却是两种东西,例如下面的例子中func函数和字符串"func"

def func():print("func是这个函数的名字")s = "func"print("%s是一个字符串" % s)

前者是函数func的函数名,后者只是一个叫func的字符串,两种是不同的事物。我们可以使用func()方式调用函数func。但是,我们不能使用"func()"的方式调用函数。说白了就是不能通过字符串来调用名字看起来相同的函数

2.反射机制

反射机制的应用场景: a.有时候我们访问某个变量或者方法时,并不知道有没有这个变量或者方法,就需要做出一些判断。判断是否存在有与变量或者方法同名的字符串存在。b.我们知道访问变量时是不能加引号的,否则会被当成字符串处理。如果想要通过字符串找到对应的同名变量,那就需要通过反射机制来处理。

3.反射有四个方法

getattr()、hasattr()、setattr()、delattr()

具体实例如下:

class A:def __init__(self, name, male):self.name = nameself.male = maledef func1(self):print("func1:my name is %s" % self.name)def func2(self):print("func2:I am a %s" % self.male)obj = A("min", "gril")hasattr(obj, "gvar") # Falsehasattr(obj, "func1") # Truegetattr(obj, "gvar") # 报错!!!getattr(obj, "name")getattr(obj,"func1")getattr(obj,"func2")()setattr(obj,"gvar","ben")getattr(obj,"gvar")delattr(obj,"gvar")getattr(A, "func2")hasattr(A, "func1")

当某个字符串与某个模块同名时,导入模块时可以使用下面的方法导入:

mymodule = __import__(var) # 相当于导入模块var.py

导入后,可以在代码中用mymodule.*(方法名)来调用该模块下的任意方法!实例如下:

# 一下是var.py文件的内容#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date : -11-04 21:58:43# @Author : cdl (1217096231@)# @Link : /cdlwhm1217096231/python3_spider# @Version : $Id$def printInfo():print("I am your father!")# 以下是demo.py文件,注意此执行文件import vars = "var"mymodule = __import__(s)mymodule.printInfo()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。