python运维开发之第六天
Python面向对象
python从设计之初就已经是一门面向对象的语言,在python中创建一个类和对象很容易。
面向对象简介:类(class),类变量,object(基类),实例变量,构造函数,封装,继承,多态,语法属性,析构函数,私有方法,私有属性。
编程范式:面向过程,面向对象,函数式编程
面向对象编程(oop编程):是利用“类”和“对象”来创建各种模型来描述现实世界事物
一、面向对象的介绍:
世界万物,皆可分类;世界万物,皆为对象。
只要是对象,就肯定属于某种品类;只要是对象,肯定就有属性。
使用面向对象的原因:可使程序的维护和扩展变得更简单,提高开发效率。
二、class(类)
定义:对一类具有相同属性的对象的抽象
class School(object):
n = 123
def __init__(self,name,addr):
self.name =name
self.addr =addr
self.students = []
self.straffs = []
def enroll(self,stu_obj):
print("为学员%s 办理注册手续"%stu_obj.name)
def hire(self,straff_obj):
print("雇佣新员工%s"% straff_obj.name)
1、类变量:上文中n变量是一个类变量,它的值将在这个类的所有实例之间共享,你可以在内部类或外部类使用。
2、构造函数: def __init__(self,name,addr):
作用:在实例化时做一些类的初始化的工作
3、实例变量:self.name = name ,其作用域就是实例本身,
4、方法功能:def enroll(self,stu_obj): #类的方法功能(动态属性)
5、创建实例对象:
s1 = school("oldboy","沙河")
三、类变量与实例变量
如果类变量是实例变量同名,调用时,找实例变量。
类变量的用途:实例共用的属性,节省开销。
class Role:
n =
def __init__(self,name):
self.name = name r1 = Role("jack")
r2 = Role("tom")
print("r1:%s\nr2:%s"%(r1.n,r2.n)) print("#".center(,"#"))
print("改变r1.n")
r1.n = "改类变量"
print("r1:%s\nr2:%s"%(r1.n,r2.n)) print("#".center(,"#"))
print("删除r1.n")
del(r1.n)
print("r1:%s\nr2:%s"%(r1.n,r2.n))
r1:123
r2:123
##################################################
改变r1.n
r1:改类变量
r2:123
##################################################
删除r1.n
r1:123
r2:123
执行结果
四、析构函数 def __del__(self):
在实例释放、销毁时,自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,关闭打开临时文件。
class Role:
n = #类变量,
def __init__(self,name,role,weapon,life_value=,money=):
'''
构造函数,在实例化时,做一些类的初始化的工作
'''
self.name = name #实例变量(静态属性)
self.role = role
self.weapon = weapon
self.__life_value = life_value #私有属性,就是life_value 前加"__"
self.money = money
def __del__(self):
'''
析构函数,实例释放,销毁时自动执行,通常用于做一些收尾的工作,
如关闭一些数据库连接,关闭打开临时文件
:return:
'''
print("%s 彻底死了"% self.name) def shot(self):
print('%s shot'% self.name) def got_shot(self):
self.__life_value -=
print('%s is got_shot' % self.name) def show_status(self):
print("name:%s,role:%s,life_value:%s"%(self.name,self.role,self.__life_value))
r1 = Role('cjk','torrerist','ak47')
r2 = Role('xzmly','police','m43')
r1.got_shot()
r1.show_status()
del r1
r2.got_shot()
执行结果:
cjk is got_shot
name:cjk,role:torrerist,life_value:
cjk 彻底死了
xzmly is got_shot
xzmly 彻底死了
五、私有方法,私有属性
私有属性:__private_attrs:两个下划线开头,声明该属性为私有属性,不能在类外部被使用或直接访问。在类内部的方法中调用时用self.__private_attrs
私有方法:__private_method:两个下划线开头,声明该方法为私有方法,不能在类外部被使用或直接访问。在类内部的方法中调用时用self.__private_method
六、继承
继承完全可以理解成类之间的类型与子类型关系
特点:
(1)在继承中基类的构造不会不自动调用,它需要在其派生类的构造中亲自专门调用。
(2)在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量,区别在于类中调用普通函数时并不需要带上self参数
(3)python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始时到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)
继承写法:
people.__init__(self,name,age)
等价于
super(Man,self).__init__(name,age) 建议使用这种,当父类变更时修改会更方便一些。
七、经典类和新式类
经典类:class People:
新式类:class People(object):
二者区别主要体现在多继承:

python2的经典类是按深度优先来继承的,新式类是按照广度优先类继承的
python3都是广度优先
python运维开发之第六天的更多相关文章
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- 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 ...
随机推荐
- SRM 407(1-250pt, 1-500pt)
DIV1 250pt 题意:每个员工可以有几个直系上司,也可以有几个直系下属.没有直系下属的人工资为1,有直系下属的人工资为所有直系下属工资之和.求所有人工资之和.人数 <= 50. 解法:直接 ...
- web前端面试试题总结---其他
其他问题 原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的? 你遇到过比较难的技术问题是?你是如何解决的? 设计模式 知道什么是singleton, factory, strategy ...
- HTML5 骨架
html: <!DOCTYPE html> <html lang="zh-CN"> <head> <title>HTML5 骨架&l ...
- 表格布局TableLayout
简单实现计算机界面布局的案例: <?xml version="1.0" encoding="utf-8"?><TableLayout xmln ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- docker入门(二)
打造自己的镜像 首先我们启动busybox镜像为容器,在该容器中安装一个小工具,再将这个容器保存为新的镜像 首先我们下载一个镜像,再启动容器 [root@centos ~]# docker pull ...
- Hibernate实体对象三种状态
Hibernate实体对象生命周期: 1. 自由状态(Transient,临时状态,瞬态) 在内存中自由存在,与数据库无关,未被Hibernate的Session管理 2. 持久状态(Persiste ...
- Android NDK 环境搭建 + 测试例程(转)
懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...
- MyBatis 学习总结(一)
1.原生JDBC(Java database connectity)操作数据库(以MySQL数据为例)步骤 1.1 加载驱动 Class.forName("com.mysql.jdbc.Dr ...
- 一道在知乎很火的 Java 题——如何输出 ab【转】
这是一个源自知乎的话题,原贴链接:一道百度的面试题,有大神会嘛? 虽然我不是大神,但我也点进去看了一下,思考了一会之后有了一些思路,然后去看其它人的答案的时候果然全都已经被各路大神们先想到并贴出来了, ...