面向对象的设计思想:
面向对象是基于万物皆对象这个哲学观点
面向对象和面向过程的区别:
面向过程:
在生活中:
它是一种看待问题的思维方式,在思考问题的时候,着眼问题是怎样一步一步解决的,然后亲力亲为去解决问题[类似于公司里的执行者]
在程序中:
代码是从上而下顺序执行,各个模块之间的关系尽可能简单,在功能上相对独立,程序的流程在写程序的时候就已经决定.
面向对象:
在生活中:
它是另一种看待问题的方式,它着眼于找到一个具有特殊功能的个体,然后委托这个个体去帮你完成某件事.这是更符合人类思考习惯的思想[指挥者]
在程序中:
把数据以及对数据的操作方法放在一起,作为一个相互依存的整体--对象
把同类的对象进行抽象出其共性,形成类
类中大多数数据,只能用本类的方法进行处理
类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信
程序执行的流程由用户在使用的过程中决定
使用面向对象进行开发,需要先找到具有所需功能更的对象来使用,如果这个对象不存在,那么则需要创建这么一个具有所需功能的对象
PS:面向对象只是一种思想,并不是一门编程语言.
区别总结:
a. 都是看待问题的一种思维方式,都能解决问题
b. 面向过程着眼于所有的事情亲力亲为
c. 面向对象着眼于找到一个具有特殊功能的对象,委托这个对象实现你需要实现的功能.
python语言是面向对象的程序设计语言,类和对象是面向对象的核心
类和对象
类:一个具有特殊功能的实体的集合[群体]
对象:在一个类中,一个具有特殊功能的实体,能够帮忙解决特定的问题,对象通常也被称为实例.
两者之间的关系:类用于描述某一对象的共同特征,而对象则是类的具体存在
类的定义:
class 类名:
类体
a.python中使用class关键字定义类
b.类名只要是一个合法的标识符即可,命名规则遵循"驼峰式命名"
c.尽量使用单个或者多个有意义的单词链接而成
类的设计:
1.事物名称[类名]: 人类 (Person)
2.特征: 身高(height) 年龄(age)等 ——>名词
3.行为: 跑(run) 说话(say) —————>动词
方法和属性的定义:
生活中描述事物的无非就是描述事物的特征和行为
python中用类来描述事物也是如此,前面已经定义了类,但是,如果只有类单独存在,没有任何意义,所以定义类其实就是定义类中的成员[成员变量和成员方法]
成员变量—>类具有的特征 例如:人—>身高,性别,体重
成员方法 —>类具有的行为 例如人—>吃喝玩乐
因此,拥有相同的(或者类似)属性和行为的对象都可以抽取出一个类
方法和属性的使用
实例化对象:
对象是实实在在的个体,负责去完成某件指定的事情
对象的创建的过程又被称作对象的实例化过程
语法:
对象名 = 类名()
对象调用方法和属性:
访问属性:
对象名.属性名
赋值:对象名.属性名 = 新值
访问方法
格式:对象名.方法名(参数列表)
构造函数和析构函数:
构造方法的使用:很多类都倾向于将对象创建为有初始化状态.因此类可能定义一个名为__init__()的特殊方法(构造方法),构造方法也叫做构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法.
class Person():
name = ""
age = 0
#构造方法
def __init__(self):
print("构造函数被执行了")
p1 = Person
#创建对象的过程中构造函数被自动调用
#得出结论:创建对象的过程中调用了构造函数
#当未手动添加构造函数时,系统会默认提供一个无参的构造函数
析构函数的使用:
析构函数: del 释放对象时自动调用
class Person():
def run(self):
print("run")
def eat(self, food):
print("eat "+food)
def __init__(self, name, age, height, weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
def __del__(self):
print("这里是析构函数")
per = Person("hanmeimei", 20, 170, 55)
#释放对象
del per
#注意:对象释放后就不能再进行访问了
#在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费
#其实就是作用域的问题