import_module + 反射
反射和import_module 都可以以字符串的形式操作对象中的成员
-
# 反射 (getattr, setattr, delattr, hasattr)
class Foo(object):
def __init__(self, name, age):
self.name = name
self.age = age
v1 = Foo("alex", 18) # --> 先实例化一个对象v1
name = getattr(v1, 'name') # --> v1.name
age = getattr(v1, 'age') # --> v1.age
exsist = hasattr(v1, "xxx") # --> 判断v1是否存在 xxx成员
set_value = setattr(v1, "sex", "man") # 设置 v1.sex = "man"
sex = getattr(v1, "sex") # --> v1.sex
delattr(v1, 'name') # 删除v1中的成员 name
name2 = getattr(v1, "name", None) # --> 获取v1.name, 没有返回None
print(name) # alex
print(age) # 18
print(exsist) # False
print(sex) # man
print(name2) # None
-
# 反射random模块
import random # 注意在反射模块时一定要先导入
v1 = getattr(random, "randint")
# random.randint
v2= v1(1, 100)
# random.randint(1, 100)
print(v2)
-
# import_module + 反射 (importlib只能导入到模块级别,不然会报错!)
from importlib import import_module
path = "openpyxl.utils.exceptions.InvalidFileException"
module, attr = path.rsplit(".", 1)
# module = "openpyxl.utils.exceptions
# attr = "InvalidFileException"
import_module(module)
# openpyxl.utils.exceptions
getattr(import_module(module), attr)
# openpyxl.utils.exceptions.InvalidFileException