Python运维开发之路《编程》
一、编程思想介绍
1.编程范式
编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式。两种最重要的编程范式分别是面向过程编程和面向对象编程。
2.面向过程编程(Procedural Programming)
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。
- def db_conn():
- print("connecting db...")
- def db_backup(dbname):
- print("导出数据库...",dbname)
- print("将备份文件打包,移至相应目录...")
- def db_backup_test():
- print("将备份文件导入测试库,看导入是否成功")
- def main():
- db_conn()
- db_backup('my_db')
- db_backup_test()
- if __name__ == '__main__':
- main()
3.面向对象编程
OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
面向对象的几个核心特性如下:
Class 类
一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法
Object 对象
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同
Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
- 1.类中封装了字段和方法;对象中封装了普通字段的值
2.防止数据被随意修改
3.使外部程序不需要关注对象内部构造,只需要通过对象对外提供的接口进行直接访问即可(方便被外部调用)
Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
- 1.通过父类,子类的方式以最小代码量实现不同角色的共同点和不同点,同时存在
Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。
- 1.接口重用
2.从父类调用子类的方法
二、面向对象编程
1.创建类和对象
class是关键字,表示类;
创建对象,类名称后加括号即可;
类中第一个参数必须为self;
类中定义的函数(def)叫做方法;
- class Person(object): #创建class,Person为类名
- def __init__(self,name): #构造函数,初始化方法
- self.Name = name
- def sayhi(self): #类的方法
- print("my name is %s."%self.Name)
- def eat(self,food):
- print('%s eating %s'%(self.Name,food)) #food属于eat类的私有属性
- p = Person('lain') #Person(p,'lain') #实例化后产生的对象叫做实例
- p1 = Person('zouliang')
- p.sayhi()
- p.eat('coco')
- ===================================================
- Person('lain') 相当于Person(p,'lain')
- self 是一个形式参数,当执行 p = Person('lain') 时,self 等于p
- 当执行 p1 = Person('zouliang')时,self 等于p2
2.面向对象的特性
封装(Encapsulation)
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
所以,在使用面向对象的封装特性时,需要:
- 将内容封装到某处
- 从某处调用被封装的内容
- class Person(object):
- def __init__(self,name,args):
- self.Name = name
- self.Args = args
- def sayhi(self):
- print("my name is %s. this year is %s "%(self.Name,self.Args))
- def eat(self,food):
- print('%s eating %s'%(self.Name,food))
- p = Person('lain',22)
- p.sayhi()
- ==================================================
- Person('lain',22)相当于将'lain',22两个参数封装到p和salf实例中的name和args属性中
多态(Polymorphism)
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
Pyhon默认不直接支持多态,但可以间接实现
- class Animal:
- def __init__(self, name): # Constructor of the class
- self.name = name
- def talk(self): # Abstract method, defined by convention only
- raise NotImplementedError("Subclass must implement abstract method")
- class Cat(Animal):
- def talk(self):
- return 'Meow!'
- class Dog(Animal):
- def talk(self):
- return 'Woof! Woof!'
- animals = [Cat('Missy'),
- Dog('Lassie')]
- for animal in animals:
- print animal.name + ': ' + animal.talk()
继承(Inheritance)
定义:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式主要有2类:实现继承、接口继承。
- class SchoolMember(object):
- members = 0 #初始学校人数为0
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def tell(self):
- pass
- def enroll(self):
- '''注册'''
- SchoolMember.members +=1
- print("\033[32;1mnew member [%s] is enrolled,now there are [%s] members.\033[0m " %(self.name,SchoolMember.members))
- def __del__(self):
- '''析构方法'''
- print("\033[31;1mmember [%s] is dead!\033[0m" %self.name)
- class Teacher(SchoolMember):
- def __init__(self,name,age,course,salary):
- super(Teacher,self).__init__(name,age)
- self.course = course
- self.salary = salary
- self.enroll()
- def teaching(self):
- '''讲课方法'''
- print("Teacher [%s] is teaching [%s] for class [%s]" %(self.name,self.course,'s12'))
- def tell(self):
- '''自我介绍方法'''
- msg = '''Hi, my name is [%s], works for [%s] as a [%s] teacher !''' %(self.name,'Oldboy', self.course)
- print(msg)
- class Student(SchoolMember):
- def __init__(self, name,age,grade,sid):
- super(Student,self).__init__(name,age)
- self.grade = grade
- self.sid = sid
- self.enroll()
- def tell(self):
- '''自我介绍方法'''
- msg = '''Hi, my name is [%s], I'm studying [%s] in [%s]!''' %(self.name, self.grade,'Oldboy')
- print(msg)
- if __name__ == '__main__':
- t1 = Teacher("Alex",22,'Python',20000)
- t2 = Teacher("TengLan",29,'Linux',3000)
- s1 = Student("Qinghua", 24,"Python S12",1483)
- s2 = Student("SanJiang", 26,"Python S12",1484)
- t1.teaching()
- t2.teaching()
- t1.tell()
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 # 添加商家入口和用户入口并实现物 ...
随机推荐
- 在Kubernetes上安装Netdata的方法
介绍 Netdata可用于监视kubernetes集群并显示有关集群的信息,包括节点内存使用率.CPU.网络等,简单的说,Netdata仪表板可让您全面了解Kubernetes集群,包括在每个节点上运 ...
- Kubernetes 各个组件 启动参数介绍
kube-controller-manager Kubernetes 控制器管理器是一个守护进程,内嵌随 Kubernetes 一起发布的核心控制回路.在机器人和自动化的应用中,控制回路是一个永不休止 ...
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
- 微信小程序隐藏页面滚动条
开发小程序时,经常会碰到页面长度超过屏幕高度,然后下拉时会出现滚动条,对于一些有强迫症的人来说是不可忍受的. 网上看了好多,写的.都评论有起作用或者不起作用的. 我在这分享一个全局隐藏滚动条的方式. ...
- 原来这就是所谓的 JSR!
相信大家在学习 Java 的过程中,或多或少都见过 JSR 这个词.本篇文章就科普下什么是 JSR. 什么是 JSR ? JSR(Java Specification Requests),是指 Jav ...
- antv x6 神奇的图片边框
昨天才把html节点中的图片转成base格式的,今天就发现一个用户体验的问题:那么是啥呢?就是我从左侧的树形菜单中拖拽节点的时候(鼠标按下也是同样问题),发现节点的图片区域那里会出现一个边框,持续时间 ...
- [C++核心编程] 4.3、类和对象-C++对象模型和this指针
文章目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 4.3 C++ ...
- 「学习笔记」tarjan求最近公共祖先
Tarjan 算法是一种 离线算法,需要使用并查集记录某个结点的祖先结点. 并没有传说中的那么快. 过程 将询问都记录下来,将它们建成正向边和反向边. 在 dfs 的过程中,给走过的节点打上标记,同时 ...
- 自动化运维工具-Ansible PlayBook
自动化运维工具-Ansible PlayBook PlayBook基本概念 PlayBook的组成 PlayBook即"剧本","兵书"之意,PlayBook是 ...
- 2023-03-20:给定一个无向图,保证所有节点连成一棵树,没有环, 给定一个正数n为节点数,所以节点编号为0~n-1,那么就一定有n-1条边, 每条边形式为{a, b, w},意思是a和b之间的无
2023-03-20:给定一个无向图,保证所有节点连成一棵树,没有环, 给定一个正数n为节点数,所以节点编号为0~n-1,那么就一定有n-1条边, 每条边形式为{a, b, w},意思是a和b之间的无 ...