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)

时间: 2024-10-08 18:31:03

python运维开发之第七天的相关文章

python运维开发笔记4

1.函数如何被调用,通过return返回值来调用 2.生成器和return区别 yield 生成器返回对象,可以迭代 可以执行 glob模块 类似shell中的正则匹配 shlex模块  Popen 将命令参数直接分词 cmd = "ps ax -o pid,ppid,cmd" shlex.split(cmd) ['ps','ax','-o','pid,ppid,cmd'] ['mysql','-u','root','-p123','-e','show processlist'] p

python运维开发笔记5

diff -Nur Diff和patch是Linux标配的工具.在Windows上,也有移植的版本可以使用. 使用中注意: 1.保证文件名完全相同,避免只有大小写不同的文件存在. 2.Diff只能比较文本文件,二进制文件只能判断是否相同,不能记录差异.Diff根据文件的前几个字节判断文件是不是文本文件. 使用方法: 可以对单个文件或者整个目录树进行处理. 以最实用的方式举例: diff –Nur dir_old dir_new > dir.patch patch –p0 < dir.patch

Python运维开发基础

Python基础知识分为以下几块 1.Python概述 2.基础语法 3.数据结构 4.Python进阶 5.实训案例 一.Python概述 1.Python简介 2.Hello World 3.搭建开发环境 4.习题 Python简介 尽管我是学计算机出身的,但是我对Python的认识是在毕业后.Python是我喜欢的语言,简洁,优美,容易使用.重要的一点是他是开源的项目. 官方网站 https://www.python.org 学习网站 http://www.okpython.com 对于简

Python运维开发基础01-语法基础【转】

开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶,Python网页编程,Python项目实战 Python开发基础分为语法基础篇,文件基础篇,函数基础篇,模块基础篇 语法基础篇中,我着重希望训练同学的是作为开发应该具备的一种逻辑思路. 文件基础篇中,我们需要练习的是如何将数据永久性的存储在硬盘上,提供读,写. 函数基础篇中,我重点是要引导同学们构

重磅|0元学 Python运维开发,别再错过了

51reboot 运维开发又双叒叕的搞活动了,鉴于之前 51reboot 的活动反馈,每次活动结束后(或者已经结束了很长时间)还有人在问活动的事情.这一次小编先声明一下真的不想在此次活动结束后再听到类似下面的话了 我之前不知道有活动 (这个锅小编我背了) 这个活动还有吗? 我想了解一下这个活动 跟我说可以给我按活动价算吗? .......... 针对以上类似的询问小编在此统一回复大家: 好了,接下来进入今天的重中之重 本次活动:Python 运维开发——18天训练营 本课程为:网络班+面授班(北

python运维开发常用模块(一)psutil

1.模块简介 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻 松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网 络等)信息.它主要应用于系统监控,分析和限制系统资源及进程的管 理.它实现了同等命令行工具提供的功能,如ps.top.lsof.netstat. ifconfig.who.df.kill.free.nice.ionice.iostat.iotop.uptime. pidof.tty.taskset.pmap等.目前

python运维开发常用模块(四)文件对比模块difflib

1.difflib介绍 difflib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持 输出可读性比较强的HTML文档,与Linux下的diff命令相似.我们可以 使用difflib对比代码.配置文件的差别,在版本控制方面是非常有用. Python 2.3或更高版本默认自带difflib模块,无需额外安装. 示例1:两个字符串的差异对比 [[email protected] part2]$ cat simple1.py #!/usr/bin/python #_*_cod

python运维开发(七)----面向对象(上)

内容目录: 面向对象应用场景 类和对象的创建 类中的__init__构造方法 self理解 面向对象的三大特性:封装.继承.多态 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处. 面向对象应用场景 当某一些函数具有相同参数时,可以

python运维开发之第六天

Python面向对象 python从设计之初就已经是一门面向对象的语言,在python中创建一个类和对象很容易. 面向对象简介:类(class),类变量,object(基类),实例变量,构造函数,封装,继承,多态,语法属性,析构函数,私有方法,私有属性. 编程范式:面向过程,面向对象,函数式编程 面向对象编程(oop编程):是利用“类”和“对象”来创建各种模型来描述现实世界事物 一.面向对象的介绍: 世界万物,皆可分类:世界万物,皆为对象. 只要是对象,就肯定属于某种品类:只要是对象,肯定就有属