【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 注意下划线







 

posted @ 2016-06-03 22:22  科学小怪癖  阅读(122)  评论(0)    收藏  举报