惟一標識問題
面向對象python2-3的區別
importlib反射代碼講解
惟一標識問題
minion 配置的Id 就是惟一標誌python
salt 'linux01' grains.item serialnumberlinux
salt 'linux01' grains.get serialnumber算法
面向對象python2-3的區別
python2app
經典類:深度優先this
demo.pyurl
代碼spa
#!/usr/bin/env python \# _\*_ coding:utf-8 _\*_ class D(): # pass def run(self): print('this D') class C(D): # pass def run(self): print('this C') class B(D): pass # def run(self): # print('this B') class A(B,C): pass demo=A() \# print(A.mro()) demo.run()
用python2 運行.net
顯示 this Dcode
新式類:C3算法(非廣度優先)對象
代碼
#!/usr/bin/env python \# _\*_ coding:utf-8 _\*_ class D(object): # pass def run(self): print('this D') class C(D): # pass def run(self): print('this C') class B(D): pass # def run(self): # print('this B') class A(B,C): pass demo=A() \# print(A.mro()) demo.run()
運行
顯示this C
經典類類型
demo_class.py
代碼
#!/usr/bin/env python \# _\*_ coding:utf-8 _\*_ class A(object): pass class B(): pass a=A() b=B() if type(a) == type(b): print('他們是同樣的') print(type(a)) else: print('他們不是同樣的') print(type(a)) print(type(b))
用python2 執行
顯示 他們是不同的
{class '__main__.A'}
{type ''instance}
類型不一樣
用python3 執行
顯示 他們是不同的
{class '__main__A'}
{class ‘__main__B’}
類型相同,但不是同一個類
python3只有新式類
養成寫入object的習慣
importlib反射代碼講解
反射:
getattr,hasattr,setattr
demo01.py
代碼
#!/usr/bin/env python \# _\*_ coding:utf-8 _\*_ import importlib import os,sys \# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_)))) \# BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_))) \# sys.path.append(BASEDIR) Host\_func\_dic = { 'disk':'func_demo.hosts.disk.Disk', } path=Host\_func\_dic.get('disk') module\_path,class\_name = path.rsplit('.',maxsplit=1) 從右開始,以.分割,只分割一次 print(module_path) print('----------') module = importlib.import\_module(module\_path) # from func_demo.hosts import disk # disk_class=getattr(disk,'Disk') disk\_class=getattr(module,class\_name) JG=disk_class() JG.run()
demo01.py
代碼
#!/usr/bin/env python \# _\*_ coding:utf-8 _\*_ import importlib import os,sys \# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_)))) \# BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_))) \# sys.path.append(BASEDIR) Host\_func\_dic = { 'disk':'func_demo.hosts.disk.Disk', 'mem':'func_demo.hosts.mem.Mem', 'cpu':'func_demo.hosts.cpu.Cpu', 'os':'func_demo.hosts.os.Os', 'ip':'func_demo.hosts.ip.Ip', } host_li=\['cpu','mem','ip'\] for host in host_li: path=Host\_func\_dic.get(host) module\_path,class\_name = path.rsplit('.',maxsplit=1) module = importlib.import\_module(module\_path) # from func_demo.hosts import disk # disk_class=getattr(disk,'Disk') disk\_class=getattr(module,class\_name) JG=disk_class() JG.run()
經過反射拿到 這個類