【1.118】反射+动态导入模块
1、反射 也可以使用 setattr 添加 函数属性到 属性字典里
class BlackMedium: """黑中介,在天府广场,卖房子和租房子""" feature = "Ugly" def __init__(self,name,addr): self.name = name self.addr = addr def sell_house(self): print("%s 黑中介卖房子啦,sb才买呢"%self.name) def rent_house(self): print("%s 黑中介租房子啦,sb才租呢"%self.name) b1 = BlackMedium("链家","天府广场") setattr(b1,"func",lambda x:x+1) setattr(b1,"func1",lambda self:self.name+"SB") print(b1.func) print(b1.func(10)) print(b1.func1(b1)) # <function <lambda> at 0x018CE030> # 11 # 链家SB
2、动态导入 如何导入 字符串的 库 py文件
在 fanshe package下
创建test.py文件
创建m1文件夹
在m1下创建 文件 t.py
在t.py下 编写:
print("来自文件 t")
def test1():
print("来自函数test1")
def test2():
print("来自函数test2")
在test.py 字符串导入:
moudel_t = __import__("m1.t") # 来自文件 t 证明要运行文件 t
print(moudel) #<module 'm1' (namespace)>
moudel_t.test1()
#来自函数test1
如果在test文件写:
form m1.t import *
test1() #来自函数test1
test2() #来自函数test2
但是这样用 * 导入的方式不能导入私有的函数 方法 只能导入没有下划线的函数
如果文件 t 中是这样的:
print("来自文件 t")
def test1():
print("来自函数test1")
def _test2():
print("来自函数test2")
就要在test 文件这样导入
form m1.t import test1,_test2
test1() #来自函数test1
_test2() #来自函数test2 运行时就要用变量名 _test2 注意下划线
也可用这样:
import importlib
m = importlib.import_module("m1.t")
print(m)
m.test1() #来自函数test1
m._test2() #来自函数test2 运行时就要用变量名 _test2 注意下划线
浙公网安备 33010602011771号