面向对象
参考:https://zhuanlan.zhihu.com/p/109292504
面向过程编程
- 面向过程编程的核心是过程,就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可,再简单理解就是程序从上到下一步步执行,从头到尾的解决问题。举例:假设有一辆汽车,它的速度是80km/h,要从A地出发到B地,其中AB两地的距离是200km。要计算这辆车从A地到B地所花费的时间,用面向过程实现如下:
- Python是一门面向对象编程,而面向对象编程是程序员发展的分水岭,尤其对很多初学者来说,有时会因无法理解面向对象而放弃学习编程,所以接下来带大家了解面向对象编程思想:
面向对象编程
- 面向对象编程是把构成事物的整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建对象的目的不是为了完成某一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
- Python中一切皆对象,比如之前学过的变量其实也都是对象,包括整形(int)、浮点型(float)、字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
- 举例:假设有一辆汽车,它的速度是80km/h,要从A地出发到B地,其中AB两地的距离是200km。要计算这辆车从A地到B地所花费的时间,用面向对象编程实现如下:
面向过程VS面向对象
- 通过以上,可以看出面向过程和面向对象有以下区别:
- 编程思想不同
- 面向过程:是一种以过程为中心的编程思想。
- 面向对象:是一类以对象为核心的编程思想。
- 特点不同
- 面向过程:主要分析出解决问题所需要的步骤,用函数把这些步骤一步一步实现,使用的时候一个一个依次调用即可。
面向对象中常用术语
- 1、类: 可以理解是一个模板,通过它可以创建出无数个具体实例。
比如,定义一个Cat类,通过它可以创建出无数个实例来代表各种不同特征的猫
- 2、对象: 类并不能直接使用,通过类创建出的实例(又称对象)才能使用,比如以上案例创建类对象cat。
- 3、属性: 类中的所有变量称为属性。比如以上案例中类的变量有 颜色color 、体重 weight 、种类kind 、年龄age。
- 4、方法: 类中的所有函数通常称为方法。不过,和函数所有不同的是,类方法至少要包含一个 self 参数,类方法无法单独使用,只能和类的对象一起使用,比如以上案例中的方法有eat()、action()、sleep(),创建对象后就可以直接调用类中的方法和属性。
- 面向对象最重要的概念就是类和实例,要牢记类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法。
面向过程例子
# 学生的数据
stu_name = "小明"
stu_age = 18
stu_gender ="男"
# 学生的功能
print("学生信息》名字:%s 年龄%s 性别:%s"%(stu_name,stu_age,stu_gender))
# 课程的数据
course_name = "python"
course_period = "6月"
course_score = 100
print("课程信息》名字:%s 周期:%s 学分:%s"%(course_name,course_period,course_score))
面向对象实例
- 面向对象:核心就是对象,对象就是将程序整合,对象是容器用来盛放数据与功能,优点:可扩展性强,缺点:编程复杂高,容易出现过度设计
- 程序 = 数据 + 功能
- 类:类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间。所以,如果说对象是用来存放数据与功能的容器,那么类则是用来存放多个对象相同的数据与功能的容器。
- 在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就是对象)。产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能,所以类中的内容仍然是属于对象的,类只不过是一种节省空间、减少代码冗余的机制,面向对象编程最终的核心仍然是去使用对象。
先定义类 后调用类产生对象(调用类的过程又称作实例化)
class Student:
def __init__(self,x,y,z):
self.name = x
self.age = y
self.gender = z
print(Student.__dict__)# 类有两种属性:数据属性和函数属性,可以通过__dict__访问属性的值
print("-------------------------")
obj = Student("小明",18,"男")
print(obj.__dict__)
print(obj.name,obj.age,obj.gender)
print("-------------------------")
obj1 = Student("小红",17,"女")
print(obj1.name,obj1.age,obj1.gender)
增删改查
class Student:# 类的命名应该使用“驼峰体”
def __init__(self,x,y,z):# 功能
self.name = x
self.age = y
self.gender = z
obj = Student("小明",18,"男")
print(obj.name,obj.age,obj.gender)
print("______________查______________")
a = obj.name,obj.age # 查
print(a)
print("______________改______________")
b = obj.age = 20 # 改
print(b)
print(obj.name,obj.age,obj.gender)
print(obj.__dict__)
print("______________增______________")
c = obj.hobby = "篮球" # 增
print(obj.__dict__)
print("______________删______________")
del obj.hobby
print(obj.__dict__)
del obj.name
print(obj.__dict__)
class Student:# 类的命名应该使用“驼峰体”
school = "清华大学" # 数据
def __init__(self,x,y,z):# 功能
self.name = x
self.age = y
self.gender = z
def good(self):# 功能
print('%s 是一个好孩子' % self.name)
print(Student.__dict__)
obj = Student("小明",18,"男")
print(Student.school,obj.name,obj.age,obj.gender)
Student.good(obj)