面向过程和面向对象
1、编程思想:
面向过程
核心是过程二字,过程指的是解决问题的步骤,即先干什么后干什么
基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化,进而简单化
缺点:可扩展性差
面向对象
核心是对象二字,对象是特征(变量)与技能(函数)的结合体
基于该思想编写程序就好比在创造一个世界(你就是这个世界的上帝),世界是由一个个对象组成的
在上帝眼里所有存在的事物都是对象,任何不存在的事物也可以创造出来
优点:可扩展性强
缺点:编程复杂度要高于面向过程
2、类
对象是特征与技能的结合体,而类则一系列对象相同特征与技能的结合体
对象是具体存在的,而类是总结出来的抽象的概念
类本质是一个容器(名称空间)
对象本质也是一个容器(名称空间)
3、类与对象
在现实世界中:一定是现有一个个具体存在的对象,然后随着人类文明的发展由人站在不同的角度总结出来的种类的概念
在程序中:先定义类,后调用类来产生对象
4、定义类
class OldboyStudent: """文档注释""" #相同的特征 school='oldboy' #相同的技能 def choose_course(self): pass 注意:类体代码会在类定义阶段立即执行,产生一个类的名称空间,用来将类体代码执行过程中产生的名字都丢到该名称空间中
5. 使用类 两种用途: 1. 当做一个容器 print(OldboyStudent.__dict__) print(OldboyStudent.school) #OldboyStudent.__dict__['school'] OldboyStudent.country='China' OldboyStudent.school='Oldboy' # del OldboyStudent.school 2. 调用类来产生对象 class OldboyStudent: '''文档注释''' # 相同的特征 school = 'oldboy' def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex # 相同的技能 def choose_course(self): pass stu1=OldboyStudent(‘egon’,18,'male') 调用类会发生两件事 1、产生一个空对象 2. 触发类的函数/对象的绑定方法__init__(stu1,‘egon’,18,'male') 强调__init__: 1. 该方法是在产生对象之后才调用 2. 该方法内可以有任意python代码,但唯独就是不能有返回值
6、属性查找
强调:类的属性与对象的属性,访问时必须加前缀
先从对象自己的名称空间中找,如果没有则去类的名称空间中找
7、绑定方法
类中定义的函数是类的函数属性,就是一个普通函数,没有自动传参的效果
但类中定义的函数其实是绑定给对象用的,称之为绑定方法,绑定方法的特殊之处,绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个位置参数自动传入