zoukankan      html  css  js  c++  java
  • python运维开发之第七天

    一、面向对象编程进阶

    1、静态方法

      @staticmethod 

      名义上归类管理,实际上跟类没什么关系

      在静态方法里,访问不了类或实例中的任何属性

    class Static_method(object):
        def __init__(self,name):    #构造函数,初始化实例变量
            self.name = name
        @staticmethod            #静态方法调用
        def eat(self,name):        #归属于类管理,实际上跟类没什么关系
            print("%s is eating"% name)
            print('可以调用self本身名字%s'% self.name)
    d = Static_method('xiaowang')    #定义一个实例
    d.eat(d,'xiaohan')         #调用self方法时,必须传实例本身作为参数
    静态方法
    xiaohan is eating
    可以调用self本身名字xiaowang
    结果

    2、类方法

      @classmethod

      只能访问类变量,不能访问实例变量

    class Class_method(object):
        class_name = 'xiaohan'            #类变量
        def __init__(self,name):    #构造函数,初始化实例变量
            self.name = name        #实例变量
        @classmethod            #类方法调用
        def eat(self):        #只能调用类变量,不能调用实例变量
            print("%s is eating"% self.class_name) #只能调用类变量class_name,实例变量name调用不了
    d = Class_method('xiaowang')
    d.eat()
    #结果
    xiaohan is eating
    类方法

    3、属性方法

      @property

      把一个方法变成一个静态属性

    class Property_method(object):
        class_name = 'xiaohan'            #类变量
        def __init__(self,name):    #构造函数,初始化实例变量
            self.name = name        #实例变量
        @property            #属性方法调用
        def eat(self):
            print("%s is eating"% self.name)
    d = Property_method('xiaowang')
    d.eat #注意这里调用不用加()
    属性方法

    4、python内置类属性

      4.1   __doc__ 打印类的描述信息

      4.2  __module__打印操作的对象在哪个模块

      4.3  __class__打印操作的对象在哪个类

      4.4  __call__方法    实例化对象()   或   类()()

      4.5  __dict__ 

        类调用:以字典形式打印类的描述、方法、属性等,不包括实例属性

        实例调用:打印所有实例属性,不包括类属性

      4.6  __str__如果一个类中定义了此方法,那么在打印对象时,默认输出改方法的返回

      4.7  __getitem__,__setitem__,__delitem__

        以上三种,用于索引操作,如字典,以上分别表示获取设置,删除数据。

      4.8  __new__,__metaclass__

        限于__init__执行 ,表示该类的由来,实例化创建。

    class Foo(object):
        '''
        这是描述信息
        '''
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def c(self):
            print('xixi')
            pass
        def __str__(self):
            return '修改默认返回值'
    class Foo1(object):
        def __getitem__(self, key):
            print('__getitem__', key)
        def __setitem__(self, key, value):
            print('__setitem__', key, value)
        def __delitem__(self, key):
            print('__delitem__', key)
    View Code
    from lib.c import Foo,Foo1
    a = Foo('cjk',18)    #实例化a
    b = Foo('xzmly',19)    #实例化b
    print(a.__doc__)    #打印描述信息
    print(a.__module__)    #打印实例a
    print(Foo.__dict__)#获取静态字段,方法
    print(a.__dict__)    #获取实例a成员
    print(b.__dict__)    #获取实例b成员
    print(a)            #对象默认返回值由类中的__str__定义
    
    #__getitem__,__setitem__,__delitem__
    obj = Foo1()
    result = obj['k1']  # 自动触发执行 __getitem__
    obj['k2'] = 'alex'  # 自动触发执行 __setitem__
    del obj['k1']
    View Code

    二、创建类的方式

    (1)普通创建方式

      class

    (2)高级方式(装B方式)

    def func(self):            #函数func
        print("hello %s"%self.name)
    def __init__(self,name,age):    #构造函数
        self.name = name
        self.age = age
    Foo = type('Foo',(object,),{'func':func,'__init__':__init__})    #type类方法构造Foo类
    f = Foo("jack",22)
    f.func()
    View Code

    三、反射(4个方法)

      利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员

      1、hasattr(obj,name)

      判断一个对象里是否有对应的字符串的方法

      2、getattr(obj,name,default=None)

      根据字符串去获取obj对象里的对应的方法

      3、setattr(x,y,v)

      相当于x.y=v

      给对象添加一个新的属性

      4、delattr(x,y)

      删除

    四、异常

      python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。  

      1、什么是异常?

      异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

      一般情况下,在Python无法正常处理程序时就会发生一个异常。

      异常是Python对象,表示一个错误。

      当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。  

      2、异常处理

      捕捉异常可以使用try/except语句。

      try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

      如果你不想在异常发生时结束你的程序,只需在try里捕获它。

    names = ["alix","wpq"]
    dic = {}
    # open('test.txt')
    try:
        # names[3]
        # dic['name']
        open('test.txt')
    # except IndexError as e:
    #     print('变量异常',e)
    # except KeyError as e:
    #     print('字典异常',e)
    except SyntaxError as e:
        print('找不到文件异常',e)
    except (IndexError,KeyError) as e:
        print('变量或字典异常',e)
    except Exception as  e:
        print('未知异常',e)
    else:
        print('没有异常,打印这个一切正常')
    finally:
        print('不管有没有异常都,打印这句')
    View Code

      3、异常类型

    # BaseException    所有异常的基类
    # SystemExit    解释器请求退出
    # KeyboardInterrupt    用户中断执行(通常是输入^C)
    # Exception    常规错误的基类
    # StopIteration    迭代器没有更多的值
    # GeneratorExit    生成器(generator)发生异常来通知退出
    # StandardError    所有的内建标准异常的基类
    # ArithmeticError    所有数值计算错误的基类
    # FloatingPointError    浮点计算错误
    # OverflowError    数值运算超出最大限制
    # ZeroDivisionError    除(或取模)零 (所有数据类型)
    # AssertionError    断言语句失败
    # AttributeError    对象没有这个属性
    # EOFError    没有内建输入,到达EOF 标记
    # EnvironmentError    操作系统错误的基类
    # IOError    输入/输出操作失败
    # OSError    操作系统错误
    # WindowsError    系统调用失败
    # ImportError    导入模块/对象失败
    # LookupError    无效数据查询的基类
    # IndexError    序列中没有此索引(index)
    # KeyError    映射中没有这个键
    # MemoryError    内存溢出错误(对于Python 解释器不是致命的)
    # NameError    未声明/初始化对象 (没有属性)
    # UnboundLocalError    访问未初始化的本地变量
    # ReferenceError    弱引用(Weak reference)试图访问已经垃圾回收了的对象
    # RuntimeError    一般的运行时错误
    # NotImplementedError    尚未实现的方法
    # SyntaxError    Python 语法错误
    # IndentationError    缩进错误
    # TabError    Tab 和空格混用
    # SystemError    一般的解释器系统错误
    # TypeError    对类型无效的操作
    # ValueError    传入无效的参数
    # UnicodeError    Unicode 相关的错误
    # UnicodeDecodeError    Unicode 解码时的错误
    # UnicodeEncodeError    Unicode 编码时错误
    # UnicodeTranslateError    Unicode 转换时错误
    # Warning    警告的基类
    # DeprecationWarning    关于被弃用的特征的警告
    # FutureWarning    关于构造将来语义会有改变的警告
    # OverflowWarning    旧的关于自动提升为长整型(long)的警告
    # PendingDeprecationWarning    关于特性将会被废弃的警告
    # RuntimeWarning    可疑的运行时行为(runtime behavior)的警告
    # SyntaxWarning    可疑的语法的警告
    # UserWarning    用户代码生成的警告
    异常类型

      4、自定义异常 

    class OldboyError(Exception):
        '''
        自定义异常
        '''
        def __init__(self,msg):
            self.message = msg
        def __str__(self):
            # return self.message #默认就是返回 self.message
            return '我的天哪'#打印对象时默认输出的返回值是"我的天哪"
    try:
        raise OldboyError('自定义异常错误')
    except OldboyError as e:
        print(e)
    View Code
  • 相关阅读:
    Redis 数据结构之dict
    分布式一致性算法——paxos
    分布式事务、两阶段提交协议、三阶提交协议
    MySQL主从数据同步延时分析
    MySQL数据丢失情况分析
    INSERT ... ON DUPLICATE KEY UPDATE Syntax
    分布式系统的数据一致性
    分布式系统的BASE理论
    分布式系统的CAP理论
    性能指标体系构建
  • 原文地址:https://www.cnblogs.com/willpower-chen/p/5855861.html
Copyright © 2011-2022 走看看