会飞的蝌蚪君

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
__doc__  #当前py文件的注释
__file__  #当前文件的地址
__package__  #指定py文件所在的文件夹,用 . 划分 ;当前文件返回None
__cached__   #缓存

if __name__ ==‘__main__’:
pass

 

from My_project.function import func1 as f1
from My_project.function import func2 as f2



def fc1():
    print('hello,world')
    f1.func1()
    f2.func2()


if __name__ == '__main__':
    fc1()

print(f1.__package__)

print(f1.__cached__)

print(f1.__file__)


# _name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

 

 

 

1 #文件同级下两种导入方式:
2 #import product
3 #pro = __import__('product') #以字符串形式
4 
5 
6 #文件不同级的情况下:
7 #import A.B.product
8 #from A.B import product
9 #pro = __import__('A.B.product',fromlist = True)  #以字符串形式

 

为避免使用 from xx import xx的操作,直接改变(添加)sys.path ,可使用:

 1 r = os.path.dirname(__file__)
 2 r1 = 'My_project'  #第一级子文件夹
 3 r2 = 'function'     #第二级子文件夹
 4 r_update = os.path.join(r,r1,r2)  #合成三个地址
 5 print(r_update) 
 6 
 7 sys.path.append(r_update)   #将新的环境变量追加进system
 8 
 9 import func1  
10 #有了上述操作则可以直接导入’os.path.dirname(__file__)‘地址下子文件夹的模块,而无需from xx import xx
11 
12 #F:/py_code/pycharm_code/q1\My_project\function

   反射:根据字符串的形式去某个对象(模块)中操作其某个成员

 

  

 1 #反射:根据字符串的形式去某个对象(模块)中操作其某个成员
 2 
 3 
 4 getattr   #get_attribute
 5 #反射,根据字符串的形式去某个模块中寻找东西(函数,全局变量,...)
 6 
 7 hasattr    #has_attribute
 8 #根据字符串的形式判断模块中是否有某个东西(函数,全局变量,...)
 9 
10 setattr    #set_attribute
11 #根据字符串的形式去某个对象(模块)中设置(或叫添加)某个东西(全局变量,函数,...)
12 
13 delattr    #delete_attribute
14 #根据字符串的形式去某个对象(模块)中删除某个东西(全局变量,函数,...)
15 
16 
17 
18 
19 #实例1:
20 
21 inp = input('your 模块 : ')
22 pro = __import__(inp)  #根据用户输入的内容,以字符串的形式导入模块
23 inp_func = input('your 要执行的函数 : ')
24 result = getattr(pro,inp_func)  #以字符串的形式在模块当中寻找相应的函数
25 result()
26 
27 
28 
29 #实例2:
30 
31 import product
32 r = getattr(product,'NAME')  #可添加None为第三参,指定为执行错误时的返回值。
33 print(r)
34 
35 s = hasattr(product,'NAME')
36 print(s)
37 
38 y = delattr(product,'NAME')
39 print(y)
40 
41 g = setattr(product,'MACK',24)
42 h = hasattr(product,'MACK')
43 print(h)
44 c = getattr(product,'MACK')
45 print(c)
46 
47 n = setattr(product,'func',lambda a :a + 1)
48 print(n)
49 
50 r = getattr(product,'func')
51 print(r(2))

 

  

@利用反射查找面向对象成员的归属
1 #反射:如果是对象,则既可以查找对象里的成员,也可以查找类里面的成员
2 
3 #反射:如果是类,则只能够查找类里面自己的成员

 

 

 





posted on 2018-01-29 17:27  会飞的蝌蚪  阅读(147)  评论(0编辑  收藏  举报