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 ...
随机推荐
- jq循环方法
jq在前台使用很广泛,其中不可避免会用到循环,for循环可以,但有时不方便,下边举两个jq循环: 第一个: $.each(数组或对象,function(index,item){ //循环的逻辑代码 } ...
- 【转】tcp_tw_recycle和tcp_timestamps导致connect失败问题
(2012-02-01 18:40:32) 近来线上陆续出现了一些connect失败的问题,经过分析试验,最终确认和proc参数tcp_tw_recycle/tcp_timestamps相关: ...
- 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别
isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...
- 欢迎加入本人建的QQ群,讨论技术,生活及每天都有招聘信息
银狐AS3游戏2 3438131 银狐AS3Help 1803321 银狐U3D 167024653 银狐AS3转H5 467565102 本人在MSDN上的帐号 https://social.msd ...
- Hibernate一对多操作
--------------------siwuxie095 Hibernate 一对多操作 以客户和联系人为例,客户是一,联系人是多 即 一个客户里面有多个联系人,一个联系人只能属于一个客户 注意: ...
- Ajax与Controller的参数交互
理论 jQuery.ajax( options )中重要参数设置 jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据.通过jquery.ajax与SpringMVC的C ...
- tp5循环+判断
- myeclipse工程中library 和 web-inf下lib的区别
eclipse工程下的library是用来编译里面的src中java文件的实际发布到tomcat时,仅仅只复制了WEB-INF/lib里面的jar包,所以出现eclipse可以正常编译但tomcat运 ...
- 视觉SLAM漫淡(二):图优化理论与g2o的使用
视觉SLAM漫谈(二):图优化理论与g2o的使用 1 前言以及回顾 各位朋友,自从上一篇<视觉SLAM漫谈>写成以来已经有一段时间了.我收到几位热心读者的邮件.有的希望我介绍一下当前 ...
- UVa 12342 Tax Calculator (水题,纳税)
今天在uva看到一个水题,分享一下. 题意:制定纳税的总额,有几个要求,如果第一个180000,不纳,下一个300000,纳10%,再一个400000,纳15%,再一个300000,纳20%,以后的纳 ...