面向对象编程基础

  • 前言
  • 一、类和对象
  • 二、定义类
  • 创建和使用对象
  • 访问可见性
  • 面向对象的三大特性
    • 1.封装
    • 2.继承
    • 3.多态
      • 练习1 定义一个类描述一下数字时钟
      • 练习2 定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法
  • 总结

前言

当下要想深入的了解编程肯定要学习“面向对象”,到底什么是面向对象编程呢?我们可以参考官方的说法:类(class)提供了一种将数据和功能捆绑在一起的方法。创建一个新类将创建一种新的对象类型,从而允许创建该类型的新实例。每个类实例可以具有附加的属性以维护其状态。类实例还可以具有用于修改其状态的方法(由其类定义)。
程序是指令集,我们通过英语字符构造的语句在执行时会变成一条条指令由CPU去执行。有时候我们为了简化程序的设计,我们引入了函数的概念,把相对独立且时常重复的代码放置到函数中,在需要使用这些功能的时候我们只需要让我们的程序代码能找到该函数并将数据交给函数去处理;如果一个函数的功能太复杂,可以将函数继续切割为子函数来降低系统的复杂性。

面向对象也不能解决软件开发中所有的问题。因为计算机这三个字包含的不仅仅是一堆硬件的工作,我将他比喻成一艘船,而一艘木船到泰坦尼克号的发展除了船体本身发生了变化外,还需要电、内燃、铁、燃料等等,比如木船是绝对不能使用煤炭作为主要驱动力的。而计算机诞生的很多编程语言对于计算机来说就是造船的工具,如果说C语言造出了钢铁,那么其他的语言有造燃料的、有发电的、有控制动力的等等。只不过越往后人们就发现底层其实是不需要太好的工具,船体只需要坚固,而舱内不仅仅需要加固还要泳池、美食、大床房、还需要更多的娱乐设施。所以需要有更多的工具进行专们的定制化制造。所以高级程序设计语言几乎都提供了对多种编程模式的支持,py也一样。


一、类和对象

类和对象,类就是对象的蓝图和模板,而对象是类的实例。这个解释我也看不懂,就凑合着理解吧。类是很抽象的,而对象是具体的。面象对象编程,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象都属于某一个类型。如果把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来,就可以定义一个叫“类”的东西。

个人建议:在学习面向对象的时候文字性的东西先不要看,完全可以去抄一些实例代码,多抄几遍,你肯定会有问题,然后再去看原理。

二、定义类

python中可以使用class关键字定义类,然后在类中通过之前学习的函数来定义方法,这样便将对象的动态特征描述出来。

class Student(object):# __init__是一个特殊的方法用于在创建对象时进行初始化操作# 通过这个方法我们可以为Student对象绑定两个属性name和agedef __init__(self,name,age)self.name = nameself.age = agedef study(self,course_name):print('%s正在学习%s.' % (self.name,course_name))def watch_move(self):if self.age < 18:print('%s只能观看《咦咦啊啊哦哦》.' % self.name)else:print('%s正在观看*.*.' % self.name)

写在类中的函数,通尝称之为(对象的)方法,这些方法就是对象可以接收的消息

创建和使用对象

当定义好一个类后,可以通过下面的方式来创建对象并给对象发消息

def main():# 给对象(Student)赋值Student1 = Student('特朗皮', 55)# 使用对象的study方法Student1.study('《如何在输掉DX后保持微笑》')# 使用对象的watch_move方法Student1.watch_move()Student2 = Student('小小怪', 16)Student2.study('《儿歌一万首》')Student2.watch_move()if __name__ == "__main__":main()

输出结果

访问可见性

这里要学习绑定属性的权限问题(好像大家都叫可见性),对象的属性会有私有的(private)或者受保护的(protected),而对象的方法通尝是公开的(public),因为公开的方法就是对象能够接收到的消息。属性和方法的访问权限只有两种,也就是公开的和私有的,要设置为私有的,在命名时就需要以两个下划线作为开头。

class newObject():def __init__(self,newO):self.__newO = newOdef __bar(self):print(self.__newO)print('__bar')def main():test = newObject('hello boy')test.__bar()print(test.__newO)if __name__ == "__main__":main()

python也并没有从语法上严格的保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来妨碍对他们的访问,如果我们知道了更换名字的规则仍然可以访问到他们,下面的代码就是很好的说明。

class newObject():def __init__(self, newO):self.__newO = newOdef __bar(self):print(self.__newO)# print('__bar')def main():new1 = newObject('say hello')new1._newObject__bar()print(new1._newObject__newO)if __name__ == "__main__":main()

面向对象的三大特性

1.封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式(简单的编程接口),将变化隔离,便于使用。

2.继承

提高代码的复用性,继承是多态的前提。

3.多态

父类或接口的定义的应用变量可以指向子类或具体实现类的实例对象,提高程序的扩展性。
注意:在接下来的练习中我们使用单下划线开头来表示属性是受保护的,跟着大佬的脚步走,但是使用但下划线开头的属性仍然可以被外界访问到。

练习1 定义一个类描述一下数字时钟

from time import sleep
import osclass clock():def __init__(self,hour=0,minute=0,second=0):"""初始化方法时 hour分 minute秒 second """self._hour = hourself._minute = minuteself._second = seconddef clockRun(self):self._second += 1if self._second == 60:self._second = 0self._minute += 1if self._minute == 60:self._minute = 0self._hour += 1if self._hour == 24:self._hour = 0def show(self):'''显示时间'''return '%02d:%02d:%02d' % (self._hour,self._minute,self._second)def main():clockshow = clock(23,55,11)while True:print(clockshow.show())sleep(1)clockshow.clockRun()os.system('cls')if __name__ == "__main__":main()

练习2 定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法

from math import sqrtclass Pdistance(object):def __init__(self,x=0,y=0):'''初始化方法x: 横坐标y: 纵坐标'''self._x = xself._y = ydef moveCoor(self,x,y):'''移动的位置坐标x:新的横坐标y:新的纵坐标'''self._x = xself._y = ydef moveAdd(self,dx,dy):'''移动的增量dx:横坐标移动的增量dy:纵坐标移动的增量'''self._x += dxself._y += dydef distanceTo(self,other):'''计算两点之间的距离other: 另一个点'''dx = self._x - other._xdy = self._y - other._yreturn sqrt(dx**2 + dy ** 2)def __str__(self):return '(%s,%s)' % (str(self._x),str(self._y))def main():p1 = Pdistance(3,5)p2 = Pdistance()print(p1)print(p2)p2.moveCoor(-1,3)print(p2)print(p1.distanceTo(p2))if __name__ == "__main__":main()

总结

学习是一个漫长枯燥的过程,唯有坚持才能让你收获更多

学到中年的python学习笔记06--面向对象基础编程相关推荐

  1. Python学习笔记:面向对象高级编程(完)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. Python学习笔记:面向对象高级编程(中下)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:面向对象高级编程(中上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:面向对象高级编程(上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. 学到中年的python学习笔记12--进程和线程

    目录 1. 简介 2. Python多进程编程 3. 进程间通信 3.1 Python multiprocessing模块下的Queue类 3.2 Pipe,又称为"管道" 4. ...

  6. 【廖雪峰Python学习笔记】面向对象高级编程

    文章目录 为实例和类绑定属性和方法 \_\_slots__限制当前class实例,对子类不管用 @property装饰器,将`getter`方法变成属性 多重继承 -- 一个子类可同时获得多个父类的所 ...

  7. Python 学习笔记 D1(基础)

    Python 学习笔记 D1(基础) 1.注释 #一个注释 ''' 多行注释 ''' 2.运算符与C++相同:+,-,*,/,%,>,<,=,>=,<=,==,!= 与C++不 ...

  8. Python学习笔记 1.0 基础内容篇章

    Python学习笔记 1.0 基础内容篇章 注释 变量 一.定义变量 二.使用变量 bug和debug bug: Debug工具: 数据类型 认识数据类型 在定义数据类型时发生的错误: 数据类型的补表 ...

  9. Python学习笔记之入门基础

    课程链接:Python入门教程--基础阶段_哔哩哔哩_bilibili Python学习笔记 注释 单行注释: * 多行注释: 1.多行前面加# 2."""注释信息&qu ...

最新文章

  1. ESLint的NPM账户遭黑客攻击,可能窃取用户NPM访问令牌
  2. 如何使用SAP事务码SAT进行UI应用的性能分析
  3. 转:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确 .
  4. Log4j介绍,log4j.properties配置详解
  5. Ubuntu服务启动脚本
  6. xftp无法链接Linux
  7. linux查看内网命令,nmap命令查看内网信息的几个...-centos6.3中lspci查看硬件信息提...-学习linux cut 命令的用法_169IT.COM...
  8. C语言小案例_OA大典故障案例摘录【第1390篇】夏普mxm2608n 黑白复印机漏粉
  9. Linux自学、大数据学习前奏笔记---Linux基础知识,shell命令介绍学习
  10. 未来计算机的新技术有哪些,科技改变生活!人类未来的十大高科技生活
  11. Python 语言程序设计——实验七
  12. 限制网页只能在微信打开
  13. 基于python的论文摘要怎么写_Django显示文章摘要需要如何写
  14. Suggestion: use tools:overrideLibrary=xxx.xxx.xxx to force usage
  15. TIA博途_基于SCL语言制作模拟量输入输出全局库的具体方法
  16. iOS开发中解决第三方静态库符号冲突的终极方案
  17. DZ拿shell总结
  18. 关于canvas画图,填充颜色,添加文字
  19. 像素和分辨率的理解、位图矢量图的区别
  20. android树状结构导航图

热门文章

  1. PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏
  2. Eigen介绍、Eigen的卸载与安装、Eigen安装
  3. thinkphp绑定事件用php,tp6的事件绑定问题,其实是这样用的
  4. nginx安装配置总结
  5. Android 之 Camera2
  6. 十五天掌握OpenCV——直方图均衡化
  7. 要点分析:用SQL+Excel监控数据库性能
  8. 华为云 UCS GitOps:轻松交付多集群云原生应用
  9. 大数据总线(DataHub)
  10. mac电脑配置adb