__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 #反射:如果是类,则只能够查找类里面自己的成员