Python运维开发之路《函数进阶》
面向对象类的进阶
抽象类
python 没有抽象类、接口的概念,所以要实现这种功能需要导入abc模块
py2:导入abc函数,_metaclass__ = abc.ABCMeta;在强制调用类下:@abc.abstractmethod
import abc class Alert(object):
'''报警基类'''
__metaclass__ = abc.ABCMeta @abc.abstractmethod
def send(self):
'''报警消息发送接口'''
pass class MailAlert(Alert):
pass m = MailAlert()
m.send()
py3:再强制调用类下添加raise NotImplementedError
import abc class Alert(object):
'''报警基类'''
__metaclass__ = abc.ABCMeta def send(self): #强制调用send,不调用报错:NotImplementedError
'''报警消息发送接口'''
raise NotImplementedError class MailAlert(Alert):
#pass
def send(self,msg):
print('>>>>>sending:',msg) m = MailAlert()
m.send('OK')
静态方法
通过@staticmethod 避免实例化开辟大量内存空间 既不能访问公有属性,也不能访问实例属性
类方法:
@classmethod 类方法,只能访问类的公有属性,不能访问实例属性
属性方法:
@property 作用是把一个方法变为一个静态属性
@property + 修改属性方法@talk.setter 删除@talk.delter
class Person(object):
''''''
name = 'LAIN'
def __init__(self,name):
self.Name = name @staticmethod #不能访问公有属性和实例属性
def eat(name,food):
print('%s is eating %s'%(name,food)) @classmethod #只能访问公有属性,不能实例属性
def walk(self):
print('%s is walking'%self.name) @property
def talk(self):
print('%s says' %self.name) p = Person('LAIN')
p.eat('LAIN','kfc')
p.walk()
p.talk
类的特殊方法
print(Foo.__doc__) 查看类的描述信息
__import__('time.account',fromlist=True) 动态导入, 以字符串模式导入模块
__call__():实例+()会触发call method
__dict__ 打印实例中所有属性值
__getitem__ 以字典的形式操作实例
__new__ 先于__init__执行,可以在new中自定义类的实例化过程
__str__ 返回实例的字符串形式
__metaclass__ 元类 动态创建类
type() 可以动态创建一个类 ===============================================
异常处理
一、基本异常处理结构
try:
代码块
except Exception as e:
代码块
二、复杂异常处理结构 try:
代码块
except:
代码块
else:
代码块
finally:
代码块 错误:try>except>finally
正确:try>else>finally 三、异常对象
try:
代码块
except Exception as obj:
python内部将错误信息封装到obj中
代码块 四、异常种类
exception 能捕获所有异常信息(万能)
try:
代码块
except Exception as obj:
代码块
execpt ValueError as obj:
代码块
execpt I/O as obj:
代码块
execpt IndexError as obj:
代码块
execpt (IndexError,IndexError) as obj:
print(obj) IndentationError,Syn... 无法抓到 五、主动触发异常 主动触发异常:raise Exception('邮件发送失败') 六、断言 assert 条件 #条件为true断言不执行,为false抛出异常 七、自定义异常 class HaiTaoError(Exception): ======================================================== 反射
getattr('容器','名称') 以字符串的形式去某个对象中,获取指定的属性
hasattr('容器','名称') 以字符串的形式判断某个对象中,是否含有指定的属性
setattr('容器','名称','值') 以字符串的形式去某个对象中,设置或添加指定属性
delattr('容器','名称') 以字符串的形式去某个对象中,删除指定属性 =========================================================
socket socket.SOCK_STREAM #for tcp
socket.SOCK_DGRAM #for udp
socket.SOCK_RAM #原始套接字
socket.SOCK_RDM #一种可靠的UDP形式
socket.SOCK_SEQACKET #废弃 =========================
server端
server = socket.socket(AF_INET,SOCK_STREAM) server.bind(('0.0.0.0',8000)) server.listen(5) conn,client_addr = server.accept() #conn,客户端过来的连接生成的对象 conn.send('') conn.recv('') server.close() client端
client = socket.socket(AF_INET,SOCK_STREAM)
client.connect()
====================================
for line in f:
conn.send(line)
f.write(d)
Python运维开发之路《函数进阶》的更多相关文章
- python运维开发之路第一天
一.python安装及环境变量配置 1.windows7安装python 1)下载地址:https://www.python.org/downloads/windows/ 如下图: 注意:下载,用代理 ...
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础01-语法基础【转】
开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...
- 重磅|0元学 Python运维开发,别再错过了
51reboot 运维开发又双叒叕的搞活动了,鉴于之前 51reboot 的活动反馈,每次活动结束后(或者已经结束了很长时间)还有人在问活动的事情.这一次小编先声明一下真的不想在此次活动结束后再听到类 ...
- Python运维开发基础01-语法基础
标签(空格分隔): Mr.chen之Python3.0执教笔记(QQ:215379068) --仅供北大青鸟内部学习交流使用 开发不是看出来的,开发一定是练出来的: 想学好开发,没有捷径可走,只有不断 ...
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础07-文件基础【转】
一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
随机推荐
- Spring 源码阅读之标签解析
全局目录.md 引子 1.容器最基本使用.md 系列1 - bean 标签解析: 2.XmlBeanFactory 的类图介绍.md 3.XmlBeanFactory 对xml文件读取.md 4.xm ...
- Express实现定时发送邮件
在开发中我们有时候需要每隔 一段时间发送一次电子邮件,或者在某个特定的时间进行发送邮件, 无需手动去操作,基于这样的情况下我们需要用到了定时任务,一般可以写个定时器,来完成相应的需求,在 node.j ...
- 【Vue项目】尚品汇(三)Home模块+Floor模块+Swiper轮播图
写在前面 今天是7.23,这一篇内容主要完成了Home模块和部分Search模块的开发,主要是使用了swiper轮播图插件获取vuex仓库数据展示组件以及其他信息. 1 Search模块 1.1 Se ...
- 如何在现有项目中使用`Masa MiniApi`?
首先我们现有创建一个空的WebApi的项目模板,这个项目模板和MasaFramework本身没有任何关联,我们本博客只是使用的MasaFramework的MiniApi的包 创建Asp.NET Cor ...
- Midjourney:一步一步教你如何使用 AI 绘画 MJ
一步一步如何使用 Midjourney 教程:教学怎么用 MJ? 一.Midjourney(MJ)是什么? Midjourney是一款使用文字描述来生成高质量图像的AI绘画工具.这篇文章主要介绍了Mi ...
- 从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源
摘要:DTT直播邀请到管雷鸣与广大开发者分享"如何在开源领域找到适合自己的路". "想象一下,你写的代码被越来越多的人使用,并极大地帮助他们提高了开发效率和稳定性.&qu ...
- 2023-05-05:给定一个无向、连通的树 树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] = [ai, bi]表示树中的
2023-05-05:给定一个无向.连通的树 树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 . 给定整数 n 和数组 edges , edges[i] = [ai, bi]表示树中的 ...
- 2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1、a2、…、an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成
2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1.a2.-.an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成 ...
- 2021-09-21:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。要
2021-09-21:给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.如果数组中不存在目标值 target,返回 [-1, -1].要 ...
- 新出的Alist云盘视频助手,真的香还是假的香?
作为某云盘的重度使用者和长期受虐者,前段时间无意中看到一款新出的网盘工具,叫Alist云盘视频助手,不同于一般的网盘工具,它不是面向网盘数据下载的,它面向的是网盘视频文件隐私保护,大白话就是:加密网盘 ...