此博客仅用于分享本人在求职路上的学习内容部以及过程(第一天)。
什么是面向对象
众所周知,我们常见的计算机编程思想有两类,一类是面向过程,一类则是面向对象。
面向过程(Procedural Programming)是一种以过程(函数)为核心的编程范式,它将程序分解为一系列步骤或函数,通过依次调用这些函数来解决问题。重点在于“怎么做”。
面向对象(Object-Oriented,简称OO)是一种编程范式,它以“对象”为核心,将数据和操作数据的方法封装在一起,通过对象之间的交互进行执行。
在面向对象中,还涉及到属性和行为两个概念:
属性:名词,用来描述事物的外在特征,例如:性别、姓名、年龄、身高、体重等,类比为面向过程中的变量。
行为:动词,原来描述事物能够做什么?例如:吃饭、睡觉等,类比为面向过程中的函数。
类和对象的概念
在掌握面向对象的基本语法之前,需要先了解类和对象这两个基本概念。
类
类是对现实事物的抽象描述。是一系列属性和方法的集合,抽象的概念,是看不见摸不着的,相当于一个模板,可以基于这个类创建N个对象。其语法格式如下:
# 定义类
# 格式一
class 类名:
# 定义方法
方法列表...
# 格式二
class 类名():
# 定义方法
方法列表...
# 格式三
class 类名(object):
# 定义方法
方法列表...
在格式二和三中,若括号中写上了其他类名,则意味着继承自该类。
对象
对象是对现实事物的具体体现。基本语法格式如下:
# python实例化对象
对象名 = 类名()
# 调用方法
对象名.方法名()
self关键字
Self是python内置的关键字,用于指向对象实例本身。一个类可以实例化多个对象,可以用于区分是哪个对象调用了类的方法。
# 1.定义类
class Car:
# 2.定义方法
def run(self):
# 3.打印self的值
print(f"self的值:{self}")
print("能跑起来了...")
# 4.创建对象1
car = Car()
# 5.输出对象结果
print(f"输出car对象名:{car}")
car.run()
# 6. 创建对象2
my_car = Car()
# 7.输出对象2的结果
print(f输出car对象名:{my_car}")
my_car.run()
在上面的代码中,我们通过在类内部输出self的值和在类外部输出对象值不难发现,二者的结果是相等的,且输出是值均为该对象在计算机内的存储地址。如下图所示
添加获取对象属性
什么是属性
属性表示的是固有特征,在python中使用变量表示。例如:在人类中,姓名、身高、年龄等均是属性。
设置/添加属性
在不同的场景下,属性的设置和添加方式有所不同。例如,在类外,属性的设置方式是:对象名.属性 = 属性值,而在类内,则可以通过类内部的魔法方法__init__()设置初始值。
获取属性
同设置/添加属性一样,在不同场景下获取属性的方法也有所不同。在类内,属性的获取方式是:self.属性名,在类外,则是对象名.属性名获取属性的值。
魔法方法
概念:在python中,有一类方法是用来对python类的功能进行加强(扩展)操作的,并且这一类的方法不需要手动触发(自动触发)。在某些特定场景中也会被动触发,因此被称为魔法方法。
__init__()方法
在类中,init方法主要是用于初始化属性的值,在创建对象是时候,会被自动调用。
init方法又分为有参数和无参数两种情况,在无参数的情况下,可以直接通过对象名 = 类名()创建对象。
特点:
1、初始化时不接受额外参数,所有属性值在方法内硬编码或通过固定逻辑生成。
2、实例化时必须无参数:obj = MyClass()
。
优点:
1、简单性:适合属性值固定的场景,无需处理参数传递。
2、安全性:避免用户传入无效参数导致的问题。
缺点:
1、灵活性差:无法通过初始化动态配置对象属性。
2、使用场景有限:仅适合属性不需要外部干预的情况。
其创建语法如下。
class 类名:
def __init__(self):
self.变量1 =
self.变量2 =
...
self.变量N =
对象名 = 类名()
在有参数的情况下,在创建对象名的时候,需要将对应的参数值传入。即对象名=类名(变量1, 变量2, ..., 变量N)。
特点:
1、接受额外参数(可选或必选),允许外部动态初始化属性。
2、实例化时可传参。
优点:
1、灵活性高:允许通过参数定制化对象属性。
2、 可扩展性:支持默认参数(如 name="default"
),平衡灵活性和简洁性。
缺点:
1、复杂度高:需要处理参数校验、默认值逻辑等。
2、错误发现:用户可能传入无效参数,需添加验证逻辑(如类型检查)。
其具体语法如下:
class 类名:
def __init__(self, 变量1, 变量2, ..., 变量N):
self.变量1 = 变量1
self.变量2 = 变量2
...
self.变量N = 变量N
对象名 = 类名(变量1, 变量2, ..., 变量N)
__str__()方法
str方法主要用于快速打印对象的各个属性值的,在输出语句打印对象时会被自动的触发。如下将通过一个具体的实例来说明str方法的作用。
class Car:
def __init__(self, color, number):
self.color = color
self.number = number
if __name__ == '__main__':
car = Car("黑色", 6)
print(car)
class Car:
def __init__(self, color, number):
self.color = color
self.number = number
def __str__(self):
return f"车身颜色:{self.color},车胎数量:{self.number}"
if __name__ == '__main__':
car = Car("黑色", 6)
print(car)
在第一段代码中,未使用str方法直接通过print输出对象之后,得到的值为该对象在计算机内的存储地址,而第二段代码在类内使用到了str方法并且返回了f"车身颜色:{self.color},车胎数量:{self.number}"的值,通过print输出之后得到的结果则是:车身颜色:黑色,车胎数量:6。由此可知,在输出语句打印对象时被自动的触发,使得car对象被赋值为f"车身颜色:{self.color},车胎数量:{self.number}"这个字符串了。
__del__()方法
del方法的作用是:当对象被删除或者文件执行结束完毕后,会自动的调用。因为del会在对象被删除或文件执行结束后自动执行,属于看不见也摸不着,我们无法直接通过结果看出是否调用了del函数。然后我们可以在del函数内输出一段提示词用于查看del的运行过程。
class Car:
def __init__(self, color, number):
self.color = color
self.number = number
def __str__(self):
return f"车身颜色:{self.color},车胎数量:{self.number}"
def __del__(self):
print("del函数执行了,将对象删除了")
if __name__ == '__main__':
car = Car("黑色", 6)
print(car)
在执行上述代码后,得到如下图所示的结果,可以看出在跑完所有代码,程序即将结束之前自动调用了del函数,将创建的car对象删除了。