首页 > 代码库 > python运维开发之第七天

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,Foo1a = Foo(cjk,18)    #实例化ab = Foo(xzmly,19)    #实例化bprint(a.__doc__)    #打印描述信息print(a.__module__)    #打印实例aprint(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 = ageFoo = 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

 

python运维开发之第七天