python运维开发之第七天
Posted willpower-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
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\']
二、创建类的方式
(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()
三、反射(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(\'不管有没有异常都,打印这句\')
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)
以上是关于python运维开发之第七天的主要内容,如果未能解决你的问题,请参考以下文章