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运维开发之第七天的更多相关文章
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础07-文件基础【转】
一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
随机推荐
- Android Proguard
Android Proguard 14 May 2015 语法 -include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基 ...
- SRM 403(1-250pt, 1-500pt)
DIV1 250pt 题意:称各个数位只含有4和7的数为lucky number,给定a,b,求[a, b]中的lucky number有多少个.a, b <= 10^9 解法:很明显的数位dp ...
- 6th day
时光荏苒,岁月如梭,2016年马上就要过去了,今天PHP的核心知识基本上已经讲完,后面就要开始学习数据库,做项目之类的,心情还真是有点小激动.总之,新年新气象,祝愿各位在新的一年里能够心想事成,好好学 ...
- 4th day
老师讲的好快啊... /* 建一个innodb类型且字符集为utf8的表,其中包括以下类型的字段:int(自增长),float,char,varchar,datetime,date,text,enum ...
- Stage3D_Game_Programming:渲染3D模型
OBJ是文件,先来解释下OBJ文件.随便找一个OBJ文件,用文本查看: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # ...
- 账户管理命令 useradd、groupadd
内容提要: 1. 掌握用户的 增/删/改 命令 2. 掌握组的 增/删/改 命令 组管理 1)groupadd groupadd 用于添加组账号.格式如下: groupadd [-g GID] GRO ...
- 使用Listener准备application作用域数据
在程序中.有些数据我们希望在程序启动的时候就准备好,而且仅仅准备一次,放在application作用域中,这时候.我们一般会用Listener来准备这些数据. 可是,用Listener准备applic ...
- Android 使用加速度传感器实现摇一摇功能及优化
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得 ...
- iOS-获取UIView的全部层级结构
在iOS中获取UIView的全部层级结构 应用场景 在实际 iOS 开发中,非常多时候都须要知道某个 UI 控件中包括哪些子控件,而且分清楚它们的层级结构和自个的 frame 以及 bounds ,以 ...
- [转] 条件变量(Condition Variable)详解
http://www.wuzesheng.com/?p=1668 条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法.举个简单的例子,应用程序A ...