zoukankan      html  css  js  c++  java
  • python之day7(模块,面向对象)

    今日上课的主要内容

    一,模块:

    二,面向对象(上):

    作业(计算器):  

     http://www.cnblogs.com/wupeiqi/articles/4949995.html
      

    模块:

    configparser:都会按照字符串进行处理
           
    import configparser

     

    config = configparser.ConfigParser()

    config.read('xxxooo', encoding='utf-8')

    练习:

    f1:

    [section1]
    k1 = v1
    k2:v2
    
    [section2]
    k10 = v10
    
    import configparser
    
    config = configparser.ConfigParser()
    config.read('f1',encoding='utf-8')
    
    ret = config.sections()
    print(ret)
    
    ret = config.items("section2")
    print(ret)
    
    ret = config.options('section2')
    print(ret)
    
    v = config.get('section1', 'k1')
    print(v)
    
    has_sec = config.has_section('section1')
    print(has_sec)
    
    # config.add_section("section3")
    # config.write(open('xxxooo', 'w'))
    #
    # config.remove_section("section3")
    # config.write(open('xxxooo', 'w'))
    
    has_opt = config.has_option('section1', 'k1')
    print(has_opt)
    
    config.remove_option('section1', 'k1')
    config.write(open('xxxooo', 'w'))
    
    config.set('section1', 'k10', "123")
    config.write(open('xxxooo', 'w'))
    


    XML:
    浏览器返回的字符串
        1,html
        2,json
        3,xml
            页面上做展示(字符串类型的一个XML格式数据)
            配置文件(文件,内部数据XML格式)
            
        每一个节点都是 element的对象

    练习1:

    from xml.etree import ElementTree as ET
    tree = ET.parse('xo.xml')
    root = tree.getroot()
    for child in root:
        print(child.tag,child.attrib)
        for grandchild in child:
            print(grandchild.tag,grandchild.attrib)
    
    str_xml = open('xo.xml', 'r').read()
    root = ET.XML(str_xml)
    for node in root.iter('year'):
        new_year = int(node.text) + 1
        node.text = str(new_year)
    
        # 设置属性
        node.set('name', 'alex')
        node.set('age', '18')
        # 删除属性
        del node.attrib['name']
    
    tree = ET.ElementTree(root)
    tree.write('new.xml',encoding='utf-8')
    
    tree = ET.parse('xo.xml')
    root = tree .getroot()
    for node in root.iter('year'):
        new_year = int(node.text) + 1
        node.text = str(new_year)
    
        node.set('age','18')
        node.set('name','sxl')
    
        del node.attrib['name']
    
    tree.write('new2.xml',encoding='utf-8')
    

    练习2:

    from xml.etree import ElementTree as ET
    from xml.dom import minidom
    
    def prettify(elem):
        """将节点转换成字符串,并添加缩进。
        """
        rough_string = ET.tostring(elem, 'utf-8')
        reparsed = minidom.parseString(rough_string)
        return reparsed.toprettyxml(indent="	")
    
    root = ET.Element('famliy')
    son1 = ET.Element('son1',{'name':'大儿子'})
    son2 = ET.Element('son2',{'name':'小儿子'})
    grandson1 = ET.Element('grandson', {'name': '儿11'})
    grandson2 = ET.Element('grandson', {'name': '儿22'})
    son1.append(grandson1)
    son2.append(grandson2)
    root.append(son1)
    root.append(son2)
    
    raw_str = prettify(root)
    tree = ET.ElementTree(root)
    tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)
    f = open("xxxoo.xml",'w',encoding='utf-8')
    f.write(raw_str)
    f.close()
    

     zipfile与tarfile

    import zipfile
    z = zipfile.ZipFile('xml.zip','w')
    z.write('new.xml')
    z.write('new2.xml')
    z.close()
    
    z = zipfile.ZipFile('xml.zip','r')
    z.extract('new.xml')
    
    
    import tarfile
    
    z = tarfile.open('xml.tar','w')
    z.add('new.xml','new_1.xml')
    z.add('new2.xml','new_2.xml')
    z.close()
    
    
    z = tarfile.open('xml.tar','r')
    print(z.getnames())
    res = z.getmember("new_2.xml")
    z.extract(res)
    

    subprocess:

    import subprocess
    ret = subprocess.call("dir", shell=True)
    print(ret)
    
    ret = subprocess.check_output("dir C:", shell=True)
    print(ret)
    
    ret = subprocess.check_call("dir C:", shell=True)
    print(ret)

    ######################################
    com = subprocess.Popen("ls", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    send_data = com.stdout.read()
    sta_er = com.stderr.read()
    send_data = str(send_data, encoding='gbk')
    return send_data

    shutil:
        http://www.cnblogs.com/wupeiqi/articles/5501365.html
        拷贝文件.

    *面向对象

    python 函数式+面向对象
    函数式编程,面向对象编程实现:发送邮件的功能
        #函数
        def mail(email,message):
            print("去发吧")
            return True
        mail('alex3714@126.com','好人')
        
        面向对象:类,对象
        
        class Foo:
            #方法
            def mail(self,email,message):
                print('去发吧')
                return True
        
    #调用
    1 创建对象,类名()
    obj = Foo()


    2 通过对象去执行方法
    obj.mail('alex3714@126.com','好人')

    3 类和对象
        a创建类
            class 类名:
            
                def 方法名(self,xxxx):
                    pass
        b创建对象
            对象 = 类名()
            
        c通过对象执行方法
            对象.方法名(123)

    4

    	#函数式:
    		def fetch(host,username,password,sql):
    			pass
    		def create(host,username,password,sql):
    			pass
    		def remove(host,username,password,nid):
    			pass
    		def modify(host,username,password,name):
    			pass
    			
    	#面向对象
    		class SQLHelper:
    			def fetch(self, sql):
    				print(sql)
    				print(self.hhost)
    				print(self.uusername)
    				print(self.pwd)
    			def create(host,username,password,sql):
    				pass
    			def remove(host,username,password,nid):
    				pass
    			def modify(host,username,password,name):
    				pass
    
    		obj = SQLHelper()
    		obj.hhost = 'c1.salt.com'      #变成self
    		obj.uusername = 'alex'
    		obj.pwd = '123'
    
    obj.fetch("select * from A")
    	
    

     ########》什么时候用面向对象?当某一些函数具有相同参数时,可以使用面向对象的方式,将参数一次性的封装到对象,以后去对象中取值即可。

    5 self是什么鬼?
        self是一个python自动会给传值的参数
        那个对象执行方法,self就给谁
        obj2.fetch('....') self == obj2

    6
        类中有一个特殊的方法 __init__,类()自动执行
        叫做构造方法。

      可以将用到的对象都写到这个函数里面。

    class SQLHelper:
        def __init__(self,a1,a2,a3):
            self.hhost = a1
            self.uusername = a2
            self.pwd = a3
    
        def fetch(self, sql):
            print(sql)
            print(self.hhost)
            print(self.uusername)
            print(self.pwd)
    
        def create(host,username,password,sql):
            pass
        def remove(host,username,password,nid):
            pass
        def modify(host,username,password,name):
            pass
    #
    obj1 = SQLHelper('c1.salt.com','alex','123')        #self = obj1
    obj2 = SQLHelper('c2.salt.com','alex','223')        #self = obj2
    
    obj1.fetch('selcet * from A')
    obj2.fetch('selcet * from A')
    

    7 面向对象
        三大特性:封装,继承,多态

    封装:

    class c1:
        def __init__(self,name,obj):
            self.name = name
            self.obj = obj
    
    class c2:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def show(self):
            print(self.age)
    
    class c3:
        def __init__(self,aaa):
            self.a = aaa
    c2_obj = c2('c2',19)
    c1_obj = c1('c1',c2_obj)
    #c2_obj.show()
    # print(c1_obj.obj.age)
    c3_obj = c3(c1_obj)            # aaa = c1_obj    c3_obj.a = c1_obj
    
    c3_obj.a.obj.show()
    

    python 继承

         -- 可支持多继承

    class F1:            #父类,基类
        def show(self):
            print('show')
           
    class F2(F1):        #子类,派生类
        def bar(self):
            print('bar')
        
        
    多继承,左边的优先级高。会先继承优先级高的。往上找

    class F1:
        def show(self):
            print('show')
    
        def Foo(self):
            print(self.name)
    
    class F2(F1):
        def __init__(self,name):
            self.name = name
    
        def bar(self):
            print("bar")
    
    F2_obj = F2('alex')
    F2_obj.bar()
    F2_obj.Foo()
    
  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/aaron-shen/p/5597913.html
Copyright © 2011-2022 走看看