Python2—0813笔记

唯一标识问题

面向对象python2-3的区别

importlib反射代码讲解


唯一标识问题

minion 配置的Id 就是唯一标志

salt 'linux01' grains.item serialnumber

salt 'linux01' grains.get serialnumber


面向对象python2-3的区别

python2

经典类:深度优先

demo.py

代码

#!/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 运行

显示 this D

新式类: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()

通过反射拿到 这个类

转载于:https://my.oschina.net/u/3959701/blog/3089944

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值