Python2—0813筆記

惟一標識問題

面向對象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算法(非廣度優先)對象

demo.py

代碼

#!/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()

經過反射拿到 這個類

相關文章
相關標籤/搜索