Python 进阶
面向对象基础
面向过程:解决问题的过程中,会把所需的步骤都列出来,然后按照步骤写代码挨个实现,这种过程化的叙事思维,就是面向过程思想。
面向对象:视角不再是步骤过程,而是另外一个视角:操作对象,这里的对象可以理解为:冰箱、手机等一些现实实体事物。
面向对象的三大特性:
封装:(大白话)把属性和方法封装在一起,仅提供对外的方法让别人去访问。好处:简化编程
继承:(大白话)孩子可使用老爹的东西。好处:代码复用
多态:(大白话)同样一个函数在不同场景下表现出不同形态。好处:解耦合,可扩展
三大特性
封装
封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合。形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是简化编程,增强安全性:
使用者不必了解具体的实现细节,而只是要通过外部接口
以特定的访问权限来使用类的成员
继承
在现实生活中,继承一般指的是子女继承父辈的财产,如:子承父业等;
在面向对象中,继承也是面向对象的基本特征之一;
继承就是子类继承父类的属性和方法,使得子类对象(实例)具有父类的特征和行为。只要是继承关系,那么都满足:is-a 关系
多态
多态是指不同类的对象对同一消息做成响应,即同一消息可根据发送对象的不同而采用多种不同的行为方式。
举例:键盘的同一个按键,在不同的软件里,功能不同。
面向对象中的重要概念
Python 是一门面向对象的语言(也是一门面向过程的语言)。要掌握面向对象的基本语法,则首先需要掌握两个重要的概念:类、对象。
类:对现实事物的抽象描述
对象:现实事物的具体体验

类
# 定义一个汽车类
class Car:
# 类属性(所有对象共享)
wheels = 4
# 构造方法 __init__(创建对象时自动调用)
def __init__(self, brand, color, speed=0):
# 实例属性(每个对象独有的数据)
self.brand = brand # 品牌
self.color = color # 颜色
self.speed = speed # 速度,初始为0
# 实例方法(操作对象的行为)
def accelerate(self, amount):
self.speed += amount
print(f"{self.color}的{self.brand}加速了,当前速度:{self.speed}km/h")
def brake(self):
self.speed = 0
print(f"{self.color}的{self.brand}刹车停下了")
def show_info(self):
print(f"品牌:{self.brand},颜色:{self.color},速度:{self.speed}km/h,轮子数:{self.wheels}")定义类
class 类名:
# 类属性
# 定义方法
def 方法():
print('方法体')self 是 python 内置的关键字,用于指向对象实例本身(代表本类当前对象的引用,哪个对象调用,self 就代表谁)。一个类可实例化多个对象,用于区分哪个对象调用了类的方法。
1.在 类外 访问类中的行为,需要通过 对象名. 的方式访问
2.在 类内 访问类中的行为,需要通过 self. 的方式访问
类内设置属性,要结合魔法方法
__init__()实现
对象
from Car import Car
car1 = Car("宝马", "黑色")
car2 = Car("特斯拉", "白色")
# 调用方法
car1.show_info() # 品牌:宝马,颜色:黑色,速度:0km/h,轮子数:4
car1.accelerate(60) # 黑色的宝马加速了,当前速度:60km/h
car1.accelerate(30) # 黑色的宝马加速了,当前速度:90km/h
car1.brake() # 黑色的宝马刹车停下了
print("---")
car2.accelerate(100) # 白色的特斯拉加速了,当前速度:100km/h
car2.show_info() # 品牌:特斯拉,颜色:白色,速度:100km/h,轮子数:4
# 访问属性
print(car1.brand) # 宝马
print(Car.wheels) # 4(通过类名访问类属性)对象使用
# 实例化
对象名 = 类()
# 调用方法或属性
对象名.方法名()
对象名.属性
# 设置属性
对象名.属性 = 属性值
from Car import Car
car1 = Car("宝马", "黑色")
# 访问属性
print(car1.brand) # 宝马
car1.brand = "特斯拉" # 修改属性
car1.name = "专属车" # 新属性
print(car1.brand) # 特斯拉
print(car1.name) # 专属车Java 靠写多个构造方法(重载),Python 靠给默认值,一个
__init__就能兼容有参和无参# Python:不能写多个 __init__,但默认值一个搞定 class Car: def __init__(self, brand="未知", color="白色"): self.brand = brand self.color = color # 等价于 Java 的两个构造方法 Car() # 无参 → 默认值 Car("宝马", "黑色") # 有参 → 传什么用什么