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","沙河")

三、类变量与实例变量

如果类变量是实例变量同名,调用时,找实例变量。

类变量的用途:实例共用的属性,节省开销。

classRole:

n= 123def __init__(self,name):

self.name=name

r1= Role("jack")

r2= Role("tom")

print("r1:%s\nr2:%s"%(r1.n,r2.n))

print("#".center(50,"#"))

print("改变r1.n")

r1.n= "改类变量"print("r1:%s\nr2:%s"%(r1.n,r2.n))

print("#".center(50,"#"))

print("删除r1.n")

del(r1.n)

print("r1:%s\nr2:%s"%(r1.n,r2.n))

View Code

r1:123r2:123

##################################################

改变r1.n

r1:改类变量

r2:123

##################################################

删除r1.n

r1:123r2:123

执行结果

四、析构函数 def __del__(self):

在实例释放、销毁时,自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,关闭打开临时文件。

classRole:

n= 123#类变量,

def __init__(self,name,role,weapon,life_value=100,money=15000):'''构造函数,在实例化时,做一些类的初始化的工作''' 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-=50print('%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 isgot_shot

name:cjk,role:torrerist,life_value:50cjk 彻底死了

xzmlyisgot_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运维开发之第六天相关推荐

  1. python运维课程标准_Python运维初级课程

    随着信息时代的持续发展,IT 运维已经成为 IT 服务内涵中重要的组成部分.面对越来越复杂的业务以及日趋多样化的用户需求,不断扩展的 IT 应用需要合理的 IT 运维保障 IT 服务灵活便捷.安全稳定 ...

  2. python 多维数组去重_python多维数组运算-女性时尚流行美容健康娱乐mv-ida网

    自动秒收录 如何加入 (当前页) 购买本站源码 自媒体交流 查询是否收录 查询收录 × 快速加入 只要做上本站的友情链接,并在您站上点击一次,就免人工自动收录!并自动排在本站第一位. 本站已收录286 ...

  3. python自动化开发和全栈开发_python全栈开发devops运维自动化方向初到高级在线课程分享...

    适用人群 面向想要devops方向发展的全栈python运维开发工程师 课程概述 课程范围:我们的课程由浅入深包含C01到C05五个等级:包含前后端知识,覆盖培养一个合格python全栈工程师所需要的 ...

  4. python开发运维工程师待遇_Python运维开发工程师薪资待遇如何

    2017年无疑是Python最火的一年.现阶段,掌握一门开发语言已经成为高级运维工程师的必备技能.如果你不会开发,那么你就不能充分理解你们系统的业务流程,那么你就不能帮助调试和优化开发人开发的程序.那 ...

  5. python运维处理序列_Python运维开发:02 序列

    列表特征 有序 编号,又名索引.下标,可以通过编号访问元素 可遍历 可追加/可插入 可删除/可以弹出 可修改 长度不定 列表定义 如,nums = [1, 2, 3, 4, 5] 使用中括号包含 每个 ...

  6. 运维转python开发_Python运维开发基础10-函数基础【转】

    一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...

  7. python运维面试题_PYTHON运维开发面试题整理

    1.请使用Linux系统命令统计出establish状态链接数有多少? netstat -an |grep ESTABLISHED |wc -l -a (all)显示所有选项,默认不显示LISTEN相 ...

  8. python web项目案例教程_Python Web开发案例教程(慕课版)——使用Flask、Tornado、Django...

    第1章 Web开发基础1 1.1 Web概述 2 1.1.1 什么是Web 2 1.1.2 Web应用程序的工作原理 2 1.1.3 Web的发展历程 2 1.2 Web前端开发基础 4 1.2.1 ...

  9. python多维字符数组_python多维数组内找指定字符串

    li=[['a','b',['t', 'c'],'d'],['e','f','g','h']] def a(l, c, ar = []): t = 0 arr = [] for i in l: if  ...

最新文章

  1. 0x33.数学 - 同余
  2. 深入理解Pytorch之register_buffer
  3. ArcGIS下的多节点可达性分析
  4. maven 导入数据库
  5. PRML(2)--绪论(下)模型选择、纬度灾难、决策论、信息论
  6. 原作者出局!Faker.js已被社区控制。。
  7. linux 日志行数,如何实时查看日志文件新增的行数
  8. 系统的延时与定时任务
  9. 将CMD内的显示内容输出到txt文件
  10. VMware vSphere 5.1 群集深入解析(二十八)- vSphere配置
  11. logo是啥_logo什么意思_LOGO是什么意思
  12. DS-5 Streamline
  13. 离散数学 第一章 部分课后习题
  14. MATLAB 计算 确定系数R2
  15. 【摘录】大学课程对照英文翻译
  16. Android 开源1:获取并解析网页信息(Jsoup)
  17. Groovy~Groovy介绍
  18. Pandas 数据分析-第八章(排序sort_index())
  19. 高级计算机网络实验——c++实现ping工具
  20. wpa_supplicant源码理解

热门文章

  1. c# 循环给数组每个元素加个逗号_C#规范整理集合和Linq
  2. git tag怎么使用_这才是真正的Git——Git内部原理揭秘
  3. 备份文件到本地服务器失败,已解决: 备份index/boostrap ,备份filesystem 失败 - Dell Community...
  4. Python+OpenCV:傅里叶变换(Fourier Transform)
  5. ssm如何支持热部署_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合
  6. git-bisect last updated in 2.19.1【转】
  7. 异构SOA系统架构之Asp.net实现(兼容dubbo)
  8. 关于产品设计的一点儿感想
  9. 作为刚開始学习的人应该怎样来学习FPGA
  10. 日志分析工具Awstats实战之Apache篇-多站点日志分析