zoukankan      html  css  js  c++  java
  • Python运维开发之路《函数进阶》

    面向对象类的进阶

    抽象类

    python 没有抽象类、接口的概念,所以要实现这种功能需要导入abc模块

    py2:导入abc函数,_metaclass__ = abc.ABCMeta;在强制调用类下:@abc.abstractmethod

    import abc
    
    
    class Alert(object):
        '''报警基类'''
        __metaclass__ = abc.ABCMeta
    
        @abc.abstractmethod
        def send(self):
            '''报警消息发送接口'''
            pass
    
    
    class MailAlert(Alert):
        pass
    
    
    m = MailAlert()
    m.send()

    py3:再强制调用类下添加raise  NotImplementedError

    import abc
    
    class Alert(object):
        '''报警基类'''
        __metaclass__ = abc.ABCMeta
    
        def send(self):         #强制调用send,不调用报错:NotImplementedError
            '''报警消息发送接口'''
            raise  NotImplementedError
    
    class MailAlert(Alert):
            #pass
        def send(self,msg):
            print('>>>>>sending:',msg)
    
    m = MailAlert()
    m.send('OK')

    静态方法

    通过@staticmethod 避免实例化开辟大量内存空间 既不能访问公有属性,也不能访问实例属性

    类方法:
        @classmethod 类方法,只能访问类的公有属性,不能访问实例属性
    属性方法:
        @property   作用是把一个方法变为一个静态属性
        @property +     修改属性方法@talk.setter  删除@talk.delter

    class Person(object):
        ''''''
        name = 'LAIN'
        def __init__(self,name):
            self.Name = name
    
        @staticmethod   #不能访问公有属性和实例属性
        def eat(name,food):
            print('%s is eating %s'%(name,food))
    
        @classmethod    #只能访问公有属性,不能实例属性
        def walk(self):
            print('%s is walking'%self.name)
    
        @property
        def talk(self):
            print('%s says' %self.name)
    
    p = Person('LAIN')
    p.eat('LAIN','kfc')
    p.walk()
    p.talk

    类的特殊方法

    print(Foo.__doc__)  查看类的描述信息
    __import__('time.account',fromlist=True)  动态导入, 以字符串模式导入模块
    __call__():实例+()会触发call method
    __dict__ 打印实例中所有属性值
    __getitem__ 以字典的形式操作实例
    __new__ 先于__init__执行,可以在new中自定义类的实例化过程
    __str__ 返回实例的字符串形式
    __metaclass__ 元类
    
    动态创建类
    type()  可以动态创建一个类
    
    ===============================================
    异常处理
    一、基本异常处理结构
        try:
            代码块
        except Exception as e:
            代码块
    二、复杂异常处理结构
    
        try:
            代码块
        except:
            代码块
        else:
            代码块
        finally:
            代码块
    
        错误:try>except>finally
        正确:try>else>finally
    
    三、异常对象
         try:
            代码块
         except Exception as obj:
            python内部将错误信息封装到obj中
            代码块
    
    四、异常种类
        exception 能捕获所有异常信息(万能)
        try:
            代码块
        except Exception as obj:
            代码块
        execpt ValueError as obj:
            代码块
        execpt I/O as obj:
            代码块
        execpt IndexError as obj:
            代码块
        execpt (IndexError,IndexError) as obj:
            print(obj)
    
        IndentationError,Syn... 无法抓到
    
    
    五、主动触发异常
    
        主动触发异常:raise Exception('邮件发送失败')
    
    六、断言
    
        assert 条件   #条件为true断言不执行,为false抛出异常
    
    七、自定义异常
    
        class HaiTaoError(Exception):
    
    ========================================================
    
    反射
    getattr('容器','名称')   以字符串的形式去某个对象中,获取指定的属性
    hasattr('容器','名称')   以字符串的形式判断某个对象中,是否含有指定的属性
    setattr('容器','名称','')  以字符串的形式去某个对象中,设置或添加指定属性
    delattr('容器','名称')   以字符串的形式去某个对象中,删除指定属性
    
    =========================================================
    socket
    
    socket.SOCK_STREAM  #for tcp
    socket.SOCK_DGRAM   #for udp
    socket.SOCK_RAM #原始套接字
    socket.SOCK_RDM #一种可靠的UDP形式
    socket.SOCK_SEQACKET #废弃
    
    =========================
    server端
    server = socket.socket(AF_INET,SOCK_STREAM)
    
    server.bind(('0.0.0.0',8000))
    
    server.listen(5)
    
    conn,client_addr = server.accept()  #conn,客户端过来的连接生成的对象
    
    conn.send('')
    
    conn.recv('')
    
    server.close()
    
    client端
    client = socket.socket(AF_INET,SOCK_STREAM)
    client.connect()
    ====================================
    for  line in f:
        conn.send(line)
        f.write(d)

    本文来自博客园,作者:白日梦想家Zz,转载请注明原文链接:https://www.cnblogs.com/zzlain/p/6130596.html

  • 相关阅读:
    Java多线程之Exchanger
    Java8 比AtomicLong更加高效的原子操作LogAdder
    synchronized父子类对象锁重入
    java8 stream多字段排序
    利用java代码给mongo数据库加索引、删除索引等操作
    C++之IO
    C++之类的定义和性质
    C++之动态内存与类型转换
    C++之字符与其他数据类型
    C++之函数与模板
  • 原文地址:https://www.cnblogs.com/zzlain/p/6130596.html
Copyright © 2011-2022 走看看