python学习之面向对象【入门初级篇】


Posted in Python onJanuary 21, 2017

前言

最近在学习Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。

概述

  • python支持多种编程范式:面向过程、面向对象、面向切面(装饰器部分)等。
  • 面向过程:根据业务逻辑从上到下写垒代码
  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

OOP思想

  • 面向对象的基本哲学:世界由具有各自运动规律和内部状态的对象组成,对象之间相互作用和通讯构成了世界。
  • 唯一性,世界没有两片相同的树叶,同样的没有相同的对象。
  • 分类性,分类是对现实世界的抽象。
  • 三大特性:封装、继承和多态

面向对象的三大特性:

一、封装

封装,对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。

私有化:将类或函数中的某些属性限制在某个区域之内,外部无法调用。

Python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。

例如:

class ProtectMe(object): 
 def __init__(self):
 self.me = "qiwsir"
 self.__name = "kivi"
 
 def __python(self):
 print("I love Python.") 
 
 def code(self):
 print9"Which language do you like?")
 self.__python()
 
if __name__ == "__main__":
 p = ProtectMe()
 print(p.me)
 print(p.__name)
 
#运行结果
qiwsir
Traceback (most recent call last):
 File "21102.py", line 21, in <module>
 print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name' 

说明:__name属性隐藏了,无法调用。

调用私有属性,可以使用property函数

class ProtectMe(object): 
 def __init__(self):
 self.me = "qiwsir"
 self.__name = "kivi"
 
 @property
 def name(self):
 return self.__name
 
if __name__ == "__main__":
 p = ProtectMe()
 print(p.name)

#运行结果
 kivi

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处
  • 从某处调用被封装的内容

第一步:将内容封装到某处

python学习之面向对象【入门初级篇】

 self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1

                              当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

python学习之面向对象【入门初级篇】

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种情况:

  • 通过对象直接调用
  • 通过self间接调用
class Role(object):
 ac = None #类变量
 def __init__(self,name,role,weapon,life_value):
 #初始化方法
 self.name = name #实例变量(成员变量)
 self.role = role
 self.weapon = weapon
 self.life_val = life_value
 
 def buy_weapon(self,weapon): #定义方法
 #self:表示实例本身
 self.weapon = weapon
 # print("%s is buying [%s]" %(self.name,weapon))
 
#把一个抽象的类变成一个具体的对象的过程,叫实例化
 
p1 = Role("sanjiang",'Police',"B10",90) #实例
t1 = Role("Chunyun",'Terrorist',"B11",100)

二、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

class SchoolMember(object):
 # member_nums = 0
 def __init__(self,name,age,sex):
 self.name = name
 self.age = age
 self.sex = sex
 # self.enroll()
 
 def enroll(self):
 SchoolMember.member_nums += 1
 print("SchoolMember [%s] is enrolled!" %self.name)
 
 def tell(self):
 print("Hello my name is [%s]" %self.name)
 
class Teacher(SchoolMember):
 def __init__(self,name,age,sex,course,salary): #重写父类的__init__方法
 super(Teacher,self).__init__(name,age,sex) #继承(新式类)
 # SchoolMember.__init__(self,name,age,sex) #继承(旧式类)
 self.course = course
 self.salary = salary
 
 def teaching(self):
 print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
 
 
 
class Student(SchoolMember):
 def __init__(self,name,age,sex,course,tuition):
 super(Student,self).__init__(name,age,sex)
 self.course = course
 self.tuition = tuition
 
 def pay_tuition(self):
 print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
python 读取excel文件生成sql文件实例详解
May 12 Python
python中requests库session对象的妙用详解
Oct 30 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python切片工具pillow用法示例
Mar 30 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
python3将变量写入SQL语句的实现方式
Mar 02 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
浅谈Python 函数式编程
Jun 20 Python
pytorch学习教程之自定义数据集
Nov 10 Python
Python 文字识别
May 11 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 #Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 #Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 #Python
python实现的多线程端口扫描功能示例
Jan 21 #Python
Python 字符串大小写转换的简单实例
Jan 21 #Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 #Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 #Python
You might like
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP中session变量的销毁
2014/02/27 PHP
php中动态变量用法实例
2015/06/10 PHP
laravel请求参数校验方法
2019/10/10 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
js计算精度问题小结
2013/04/22 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
JavaScript引用类型Array实例分析
2018/07/24 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
简单介绍Python中的round()方法
2015/05/15 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
Python语法分析之字符串格式化
2019/06/13 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
机关单位人员学雷锋心得体会
2014/03/10 职场文书
中学生家长评语大全
2014/04/16 职场文书
村抢险救灾方案
2014/05/09 职场文书
组织鉴定材料
2014/06/02 职场文书
交通志愿者活动总结
2014/06/27 职场文书
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电