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 ...
随机推荐
- StringUtils的isNotEmpty和isNotBlank
StringUtils中一共有130多个方法,并且都是static的,所以我们可以这样调用StringUtils.xxx():今天笔者记录下常用的isNotEmpty和isNotBlank:这两个都是 ...
- Thread(线程)三
今天我们继续接着线程讲讲,上一章提到一下task概念, 首先接着task继续往下讲,在前章节提到过Thread怎么实现其他线程完成后再让主线程继续执行的功能,那么如果Task也需要线程等待事件,该怎么 ...
- IPHONE 64位和32位
参考段一:iPhone 5没有64位的,只有32位架构,苹果是从iPhone 5s开始对全线移动产品使用64位架构.iPhone 5s发布之后的所有产品都是64位的使用LUAJIT或LUAC都可以对L ...
- Redis 非关系型数据库 ( Nosql )
简介: Redis 是一个开源的,高性能的 key-value 系统,可以用来缓存或存储数据. Redis 数据可以持久化,并且支持多种数据类型:字符串(string),列表(list),哈希(has ...
- Dreamweaver安装与破解
1.下载Dreamweaver cs6破解版解压包 打开下载网址http://pan.baidu.com/s/1jGr8pbK,点击下载,保存到自己想要保存的位置. 2.下载Dreamweaver c ...
- spring注解扫描组件注册
最近对单点系统进行微服务拆分,被各个springboot的组件注册搞得云里雾里的.(有的是通过springboot的自动配置进IOC容器的,有的是自己添加构造方法添加进IOC容器.)决定抽时间将spr ...
- 【UVA1515 算法竞赛入门指南】 水塘【最小割】
题意: 输入一个h行w列的字符矩阵,草地用“#”表示,洞用"."表示.你可以把草改成洞,每格花费为d,也可以把洞填上草,每格花费为f.最后还需要在草和洞之间修围栏,每条边花费为b. ...
- Eclipse设置Tab键缩进4个空格的步骤,也就是按一下Tab键输出四个空格
Eclipse设置Tab键缩进4个空格的步骤,也就是按1下Tab键输出4个空格,步奏如下 1.点击 window->preference-,选择 General->Editors-> ...
- 《Android Studio实用指南》4.27 使用演示模式
本文节选自<Android Studio实用指南> 第4章第27节 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. 什么是演 ...
- 每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"
CPU: 型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 数量:lscpu |grep "CPU ...