面向过程和面向对象的区别:
面向过程:
需要实现一个功能时候,看中的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码。我们可以理解为,我们需要详细的规划每一个步骤。
比如我们清扫一个三层房间,
每一层用扫把怎么扫、
从哪里扫、
先从哪层开始扫。
每一个步骤我们都需要详细考虑
面向对象:
需要实现一个功能的时候,看中的不是开发的步骤和过程,而是关心谁去做。相当于我们不需要考虑具体怎么去做,而是考虑我们用这个对象达成什么目的即可。
还是上面那个例子,
如果我们有三个机器人,
机器人A去打扫第一层,
B去打扫第二层,
C去打扫第三层。
我们不需要考虑具体怎么扫地,
只需要管理哪个机器人去扫就可以了,
这就是面向对象。
总结:
面向对象和面向过程,是两种编程思想。编程思想是指同一个问题,用不同的视角去解决问题。
- 面向过程: 注重过程,实现的细节,亲力亲为。
- 面向对象: 关注的是结果,当然了。面向对象的底层逻辑还是面向过程。只不过我们从一个较为宏观的角度去看待问题了。
类和对象:
- 类是一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物
- 属性:特征,通常定义在init方法中
- 方法:行为,python中以函数的方式来执行行为
用人话来讲述什么是类:
封装代码的是函数,那么封装函数的就是类。函数里面有好几个代码。类里面也有好几个类。
举例:
设计机器人类:
类名:Robot
属性:名字、颜色、身高
方法:问好、烧饭、跑步
类和对象的关系:
用类去创建一个或多个对象: 类是一个比较抽象的概念,就像机器人类很抽象。而对象是比较具体的概念,比如说阿尔法狗、chatgpt,也是个机器人它们就是个对象,非常具体。
类就相当于图纸,对象相当于图纸生产出来的具体的产品,而这个对象会运用方法去实现对应的功能。
定义类:
语法:
#类名的第一个字母通常要大写
class 类名():
代码...
创建对象:
语法:
对象名.类名()
实例演示:
#创建一个机器人类
#所有类都默认继承object原始类
class Robot(object):
"""
# self 指的是调用该函数的对象
#由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象
"""
#类内的方法基本都带有self参数
def run(self):
print("我正在执行跑步")
print(id(self))
if __name__ == '__main__':
#机器人aerfa是创建的一个实例对象
aerfa = Robot()
aerfa.run()
print(id(aerfa))
魔法方法:
在Python里面,两个下划线开头 两个下划线结束的这类方法叫做魔法方法,指的是具有特殊功能的函数
__init __方法:
- 这个魔法方法,在创建一个对象时会默认被调用,只要实例化一个对象就会自动调用,不需要手动调用。
- init里面的self参数,不需要开发者传递,解释器会自动传递。
- 属性一般都写在init函数里面,init里面有多少参数,实例化对象的时候就要传入多少参数。
__ del __方法:
#创建一个机器人类
#所有类都默认继承object原始类
class Robot(object):
"""
# self 指的是调用该函数的对象
#由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象
"""
#类内的方法基本都带有self参数
def __init__(self,name,age,sex):
# 初始化方法,在实例化时会自动调用
self.name = name
self.age = age
self.sex = sex
def __del__(self):
#析构函数,当删除实例的时候,就会自动调用此方法
#通过del关键字用来删除实例对象
print(f"{self.name}被析构了")
def run(self):
print("我正在执行跑步")
if __name__ == '__main__':
#机器人aerfa是创建的一个实例对象
aerfa = Robot("dog",18,"ta")
#可通过对象.属性直接拿出属性
print(aerfa.name)
del aerfa
# name 'aerfa' is not defined
print(aerfa.age)