python学习之路 八 :面向对象编程基础
本节重点
了解面向对象、面向过程的区别
掌握什么是类,什么是对象
掌握如何定义及使用类和对象
了解类与对象间的关系
掌握类属性和实例属性
掌握绑定方法
一.编程范式
编程即写程序or写代码,具体是指程序员用特定的方法+数据结构+算法编写代码,目的是用来告诉计算机如何执行任务。
如果把编程的过程比喻为练习武功,那么编程范式值的就是武林中的各种流派,而在编程的世界里最常见的两大流派就是:面向过程和面向对象。
“功夫”的流派没有高低之分,只有习武的人才有高低之分,在编程世界里更是这样,面向过程与面向对象在不同的场景下都各有优劣,谁好谁坏不能一概而论,下面就让我们来详细了解它们。
二.面向过程设计
面向过程:核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么...再干什么......,基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式。若程序一开始是要着手解决一个大的问题,面向过程的基本设计思路就是把这个大的问题分解成很多歌小问题或子过程,这些子过程在执行的过程中继续分解,直到小问题足够见到到可以在一个小步骤范围内解决。
优点是:复杂的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)
缺点是:一套流水线或者流程就是用来解决一个问题,比如生产契税的流水线无法生产汽车,即便是能,也得大改,改一个组件,与其相关的组件都要修改,牵一发而动全身,扩展性极差。
应用场景:面向过程的程序设计思想一般用于那些功能一旦实现之后就很少需要改变的场景,如果你知识写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,著名的例子有Linux内核,git,以及Apache Http Server等。但如果你要处理的任务是复杂的,且需要不断迭代和维护的,那还是用面向对象更方便了。
三.面向对象设计
面向对象:核心是“对象”二字,要理解对象为何物,必须把自己当成上帝,在上帝眼里,世间存在的万物皆为对象,不存在的也可以创造出来。基于面向对象设计程序就好比在创造一个世界,世界是由一个个对象组成,而你就是创造对象的上帝。
与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界的而非流程的模拟,是一种“上帝式”的思维方式。
优点是:解决了面型过程可扩展性低的问题。需要强调的是,对于一个软件质量来说,面向对象的程序设计并不代表全部,面向对象的程序设计只是用来解决扩展性问题。
缺点是:编程的复杂度远高于面向过程,不了解面向对象而立即上手并基于它涉及程序,极容易出现过度设计的问题,而且在一些扩展性要求低的场景使用面向对象会徒增编程难度,比如管理linux系统的shell脚本程序就不适合面向对象去设计,面向过程反而更加适合。
应用场景:当然是应用于需求经常变化的软件中,一般需求的变化都几种在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。
四.类与对象
1.类与对象概念
类即类别、种类,是面向对象设计最重要的概念。对象是特征和技能的结合体,而类则使一系列对象相似的特征和技能的结合体。
在现实生活中:先有对象,再有类
再程序总:先定义类,后产生对象
2.定义类
class School:
name = 'qinghua'
def learn(self):
print('is learning')
def eat(self):
print('is eating')
def sleep(self):
print('is sleeping')
注意
类中可以有任意python代码,这些代码在勒定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名和函数名,可以通过School.__dict__ 查看
类中定义的名字,都是类的属性,点事访问属性的语法
对于经典类来说我们可以通过该字典操作类名称空间的名字,但新式类有限制(新式类与经典类的区别我们将在后续章节介绍)
五.类属性和实例属性
类属性:School.name
实例属性:s = School()
s.addr = '北京'
六.属性查找与绑定方法
1.属性查找
类的数据属性是所有对象共享的
类的函数数据是绑定给对象使用的,称为绑定到对象的方法
2.绑定方法
类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但是必须遵循函数的使用规则,有几个参数就传几个参数。
class School:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex =sex def learn(self):
print('%s is learning') s1 = School('清华',18,'男')
School.learn(s1)
s1.learn()
类中定义的函数(没有别任何装饰器装饰的),其实主要是给对象使用的,而且是绑定到对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象时其实是不同的方法。
强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法__init__也是一样的道理)
s1.learn() # 等同于School.learn(s1)
python学习之路 八 :面向对象编程基础的更多相关文章
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- Python学习之路——类-面向对象编程
类 面向对象编程 通过类获取一个对象的过程 - 实例化 类名()会自动调用类中的__init__方法 类和对象之间的关系? 类 是一个大范围 是一个模子 它约束了事务有哪些属性 但是不能约束具体的值 ...
- Python学习之路9☞面向对象的程序设计
一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...
- python学习笔记15(面向对象编程)
虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程. 一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界 ...
- Python学习札记(三十) 面向对象编程 Object Oriented Program 1
参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...
- Python学习之路15☞socket编程
一 客户端/服务器架构 即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二 os ...
- Python学习之路10☞面向对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(objec ...
- python学习之路-8 面向对象之进阶
上篇内容回顾和补充 面向对象三大特性 封装 继承 多态 在python中没有多态的概念 变量的类型允许为多种数据类型称之为多态 # c#/java中的多态 # 伪代码 def func(int arg ...
- Python学习笔记四:面向对象编程
一:定义类并创建实例 Python中定义类,通过class关键字,类名开头大写,参数列表为所继承的父类.如果没有需要明确继承的类,则继承object. 使用类来创建对象,只需 类名+() 形式即可,p ...
随机推荐
- Docker remote api 开启
https://www.cnblogs.com/520playboy/p/7921633.html ExecStart=/usr/bin/dockerd-current -H unix:///var/ ...
- postman的使用方法详解
Collections:在Postman中,Collection类似文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里面也可以再建文件夹.如果做API文 ...
- ROS 禁止公网暴力破解SSH FTP
最简单的彻底禁止公网访问SSH FTP端口 1 2 /ip firewall filter add chain=input protocol=tcp dst-port=21-22 src-addres ...
- go_指针
值传递:相当于在内存中拷贝一分变量出来,拷贝变量的改变对原变量不影响 引用传递:直接引用内存中的变量,会被改变 c,c++值传递和引用传递都有 Java,python多用引用传递 go语言指针简单之处 ...
- Java方法重写与super关键字
----------siwuxie095 方法的重写: (1)在继承中也存在着重写的概念,其实就是子类定义了和父类同名的方法 (2)定义:方法名 ...
- 快速上手Runtime(一)之消息机制
Runtime简介 Runtime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于动态 ...
- 爬虫解析:XPath总结
1.加载 XML 文档 所有现代浏览器都支持使用 XMLHttpRequest 来加载 XML 文档的方法. 针对大多数现代浏览器的代码: var xmlhttp=new XMLHttpRequest ...
- Git,GitHub以及GitLab的区别
Git - 版本控制工具 Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等 GitLab - 基于Git的项目管理软件 Git分布式版本控制系统 Git是一款 ...
- 线上应用故障排查:高CPU占用
转自:hankchen,http://www.blogjava.net/hankchen 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 以我们最近出现的一个实际故障 ...
- linux的“自动化”-乾颐堂CCIE
linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应.日志分割.数据整理,在特定状态执行特定任务等等,这些都会需要linux能实现自动执行某些任任务.本篇博文介 ...