先分享几个核心判断:在Python基础进阶阶段,数据结构和算法是绝对的重点,大厂笔试面试几乎都会涉及,尤其是算法思想中的背包问题,考查频率极高。面试环节除了数据结构和算法,操作系统的进程管理、计算机网络的三次握手与客户端服务器交互、MySQL索引优化与调优、Redis——这些在Java开发领域都是重中之重,值得投入时间深入研究。而人工智能的学习路径确实充满挑战,数学是基础,目前算力和GPU仍是瓶颈,但相信未来会逐步突破。各类算法必须熟练掌握,特别是基础算法。后续将更新机器学习和深度学习的内容,届时会详细展开。再往后,AI大模型知识和实战项目也会陆续补充。同时,Java的常用框架也会抽时间更新。一起进步吧!

一.面向对象
面向对象编程让开发更贴近现实世界——每个对象都被赋予属性和方法,使编程更加直观。它的核心理念是模拟真实世界,在现实生活中,一切事物都可以看作对象。当我们解决问题时,通常会将所需步骤列出,然后按步骤编写代码逐一实现——这种基于步骤的叙事思维,就是面向过程思想。当视角转向操作对象而非步骤时,对象可以是冰箱、手机、电脑等各种现实实体。
举个例子:
# 1.1 定义类,语法:class 类名
class Car:
# 1.2 定义类方法
def run(self):
print('能跑起来...')
pass
# 2 创建对象,语法:对象名 = 类名()
car01 = Car()
car01.run()
# 3 创建对象,语法:对象名 = 类名()
car02 = Car()
car02.run()
面向对象三大特性:
封装:简单来说,就是将属性和方法封装为一个整体,仅对外提供访问接口。其优点在于简化编程,提升代码安全性。
继承:子类能够复用父类的属性和方法,实现代码重用,降低冗余。
多态:同一个函数(消息)在不同上下文中呈现不同行为,有助于解耦合和扩展。
封装:在面向对象中,封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制程序中属性的读取和修改的访问级别。把抽象得到的数据和行为(或功能)结合成一个有机整体,也就是将数据与操作数据的源代码结合,形成“类”,其中数据和函数都是类的成员。
继承:现实生活中,继承通常指子女继承父辈的财产(如“子承父业”);在面向对象中,继承是基本特征之一,子类继承父类的属性和方法,使得子类对象具有父类的特征和行为。
多态:多态指不同类的对象对同一消息做出响应,同一消息根据发送对象的不同而采用多种不同的行为方式。简单说,同一个函数在不同场景下表现出不同形态(功能)。
再看个例子:
# 1.1 定义类语法: class 类名:
# 1.2 定义类方法
# 2 创建对象语法: 对象名 = 类名()
# 3 调用方法语法: 对象名.方法名()
# 4 命名
# 大驼峰命名法 MyClassName, 类名多采用大驼峰命名法
# 小驼峰命名法 myClaseName, 变量名对象名多采用小驼峰命名法
# 匈牙利命名法 变量名=属性+类型+对象描述。m_strName 变量名对象名多采用匈牙利命名法
# 1.1 定义类
class Car:
# 1.1 定义类方法
def run(self):
print('能跑起来')
# 2 实例化对象1
car01 = Car()
car01.run()
print('car01:', car01)
# 3 实例化对象2
car02 = Car()
car02.run()
print('car02:', car02)
2.self关键字
# 1 为什么需要self:
# 从Python解释器角度思考: 解决类和对象 1:多 关系
# 对run(self)方法, 哪个对象调用run方法self就是谁
# 2 self作用: 在类的内部调用类的属性和方法, 采用self
# 3 区分类的内部和类的外部
# 小结: 在类外部调用方法用 对象.方法() ;在类的内部调用属性和方法用 self.run
class Car:
# self: 谁调用类中的run函数, self就代表谁
def run(self):
print(f'跑起来, self:{self}')
# 在类的内部调用类的属性和方法, 采用self
def work(self):
self.run()
pass
mycar01 = Car()
print('mycar01-->', mycar01)
mycar01.run() # 相当于Car.run(mycar01)
print('-'*55)
mycar02 = Car()
print('mycar02-->', mycar02)
mycar02.run() # 相当于Car.run(mycar02)
print('-'*55)
mycar03 = Car()
mycar03.work()
3.类内外部添加和获得属性
# 类外部添加属性: 对象.属性名 = 属性值
# 类外部获取属性: 对象.属性名
# 1 定义类
class Car:
def run(self):
print('能跑起来...')
# 2 在类的外部 添加属性
car = Car()
car.color = '红色'
car.number = 4
# 3 在类的外部 使用属性
print(f'车的颜色:{car.color}')
print(f'车的轮胎数:{car.number}')
# 注意1
# car2 = Car()
# print(f'车的颜色:{car2.color}')
# print(f'车的轮胎数:{car2.number}')
# 类外部添加属性: 对象.属性名 = 属性值
# 类外部获取属性: 对象.属性名
# 类内部获取属性: self.属性名
# 1 定义类
class Car:
def run(self):
print('能跑起来...')
def show(self): # 3 类内部获取属性
print(f'车的颜色:{self.color}')
print(f'车的轮胎数:{self.number}')
# 2 设置类属性
car = Car()
car.color = '红色'
car.number = 4
# 4 调用show方法
car.show()
# 注意1
# car2 = Car()
# print(f'车的颜色:{car2.color}')
# print(f'车的轮胎数:{car2.number}')
4.有无参init方法
# 魔法方法: 满足规则, 会被python解释器自动调用
# init魔法方法: 新创建对象时,会自动触发__init__()魔法方法
#无参
# 1 定义类
class Car:
# 定义魔法方法init
def __init__(self):
self.color = '红色'
self.number = 4
# 定义run方法
def run(self):
print('跑起来...')
# 定义show方法
def show(self):
print(f"车的颜色:{self.color}")
print(f"车的轮胎数:{self.number}")
# 2 实例化对象
mycar = Car()
# 通过show方法访问属性
mycar.show()
# 通过 对象名.属性名 访问属性
print(mycar.color)
print(mycar.number)
# init魔法方法: 创建对象时被python解释器自动调用
#有参
# 1 定义类
class Car:
# 定义魔法方法init
def __init__(self, color, number):
self.color = color
self.number = number
# 定义run方法
def run(self):
print('跑起来...')
# 定义show方法
def show(self):
print(f"车的颜色:{self.color}")
print(f"车的轮胎数:{self.number}")
# 2 实例化对象
mycar = Car('红色', 8)
# 通过show方法访问属性
mycar.show()
# 通过 对象名.属性名 访问属性
print(mycar.color)
print(mycar.number)
5.str魔法方法
# str魔法方法:打印print对象时, 被python解释器自动调用, 返回该方法的结果
# 如果不重写str魔法方法: 默认打印对象的内存地址
# 1 定义类
class Car:
# 定义魔法方法init
def __init__(self, color, number):
self.color = color
self.number = number
# 定义run方法
def run(self):
print('跑起来...')
# 定义show方法
def show(self):
print(f"车的颜色:{self.color}")
print(f"车的轮胎数:{self.number}")
def __str__(self):
# 注意 需要返回str
# print (f'车的颜色{self.color}, 车的轮胎数{self.number}')
return (f'车的颜色{self.color}, 车的轮胎数{self.number}')
# 2 实例化对象
mycar = Car('红色', 8)
# 通过show方法访问属性
print('mycar:', mycar)
6.del魔法方法
# del 魔法方法:调用del删除对象或文件执行结束后, python解释器会自动调用该方法
# 1 定义类
class Car:
# 定义魔法方法init
def __init__(self, color, number):
self.color = color
self.number = number
# 定义run方法
def run(self):
print('跑起来...')
# 定义show方法
def show(self):
print(f"车的颜色:{self.color}")
print(f"车的轮胎数:{self.number}")
def __str__(self):
# 注意 需要返回str
# print (f'车的颜色{self.color}, 车的轮胎数{self.number}')
return (f'车的颜色{self.color}, 车的轮胎数{self.number}')
def __del__(self):
print('del自动调用了该方法 清理资源')
pass
def dm01_auto_car():
# 2 实例化对象
mycar = Car('红色', 8)
# 通过show方法访问属性
print('mycar:', mycar)
pass
# 删除对象
del mycar
# 对象删除后不能再被使用
# mycar.run()
if __name__ == '__main__':
print('dm01_auto_car 111111111')
dm01_auto_car()
print('dm01_auto_car 22222222222')
一个综合案例:烤地瓜
# 1 实例化类 SweetPotato
# init 函数 cook_time cook_state condiments
# cook 地瓜被烤函数
# add_condiments 添加调料
# str魔法方法
# 2 用类实例化对象
# 不断的烤地瓜/添加调料, 打印对象状态
# 1 定义类
class SweetPotato():
# 1.1 初始化属性
def __init__(self):
self.cook_time = 0 # 被烤时间
self.cook_state = '生的' # 烤的状态
self.condiments = [] # 调料列表
pass
# 1.2 地瓜被烤
def cook(self, time):
# 计算总时间
self.cook_time += time
# 根据总时间显示地瓜状态
if 0<= self.cook_time < 3:
self.cook_state = '生的'
elif 3<= self.cook_time < 7:
self.cook_state = '半生不熟'
elif 7 <= self.cook_time < 12:
self.cook_state = '熟的'
elif self.cook_time >= 12:
self.cook_state = '糊了'
# 1.3 添加调料
def add_condiments(self, condiments):
self.condiments.append(condiments)
# 1.4 魔法方法str
def __str__(self):
return f'这个地瓜被烤的时间:{self.cook_time}, 状态是:{self.cook_state}, 调料是:{self.condiments}'
pass
if __name__ == '__main__':
mypotato = SweetPotato()
print(mypotato)
mypotato.cook(2)
mypotato.add_condiments("酱油")
print(mypotato)
mypotato.cook(2)
mypotato.add_condiments("辣椒面")
print(mypotato)
mypotato.cook(2)
print(mypotato)
mypotato.cook(20)
print(mypotato)
二.1.类定义的三种方法
# 1 定义类的三种方法
# 2 python中object类是所有类的老祖宗
# 3 万物皆对象
# 定义类 方法1 旧的方式
class Teacher1:
pass
# 定义类 方法2旧的方式
class Teacher2():
pass
# 定义类 方法3 后续都用此方法
class Teacher3(object):
pass
if __name__ == '__main__':
myt1 = Teacher1()
myt2 = Teacher2()
myt3 = Teacher3()
print(myt1, myt2, myt3)
2.继承的语法
# 1 继承概念: 类B从类A中继承父类的属性和方法
# 2 父类: 基类 子类: 派生类
# 3 继承作用: 提高代码的复用率
# 1 定义父类 属性和方法 room sex work
# 2 定义子类 继承父类
# 3 实例化子类对象, 可使用继承的属性和方法
# 1 定义父类 属性和方法
class Father(object):
def __init__(self):
self.room = 4
self.sex = '男'
def work(self):
print('喜欢散步...')
pass
# 2 定义子类, 继承父类
class Son(Father):
pass
# 3 实例化子类对象 使用父类的属性和方法
myson = Son()
print(myson.room)
print(myson.work())
if __name__ == '__main__':
pass
3.单继承和多继承
# 1 定义师父类 Master
# 1.1 定义init初始化 kongfu
# 1.2 定义 make_cake
# 2 定义徒弟类 Prentice 继承师父类
# 3 实例化徒弟类, 调用属性/调用方法
#单继承
# 1 定义师父类 Master
# 1.1 定义init初始化 kongfu
# 1.2 定义 make_cake
class Master(object):
def __init__(self):
self.kongfu = '[传统方法]'
def make_cake(self):
print(f'使用{self.kongfu}摊煎饼')
# 2 定义徒弟类 Prentice 继承师父类
class Prentice(Master):
pass
# 3 实例化徒弟类Prentice , 调用属性/调用方法
prentice = Prentice()
print(prentice.kongfu)
prentice.make_cake()
# 如果一个类继承多个父类,优先继承第一个父类的同名属性和方法
# 通过子类的mro()方法 __mro__属性 查看父类的先后顺序
# MRO(Method Resolution Order):方法解析顺序
# 1 定义师父类 Master
# 1.1 定义init初始化 kongfu
# 1.2 定义 make_cake
# 2 定义HeimaSchool类 /kongfu /make_cake
# 3 定义徒弟类 继承Master HeimaSchool
# 4 实例化徒弟类 Prentice, 调用属性/调用方法
# 5 通过子类的mro()方法 __mro__属性 查看父类的先后顺序
class Master(object):
def __init__(self):
self.kongfu = '[传统方法]'
def make_cake(self):
print(f'使用{self.kongfu}摊煎饼')
# 2 定义HeimaSchool类 /kongfu /make_cake
class HeimaSchool(object):
def __init__(self):
self.kongfu = '[黑马配方]'
def make_cake(self):
print(f'使用{self.kongfu}摊煎饼')
# 2 定义徒弟类 继承Master HeimaSchool
class Prentice(Master, HeimaSchool):
# class Prentice(HeimaSchool, Master):
pass
# 3 实例化徒弟类, 调用属性/调用方法
xiaoming = Prentice()
# 注: 实例化类对象,不要忘()
print(xiaoming.kongfu)
xiaoming.make_cake()
# 4 通过子类的mro()方法 __mro__属性 查看父类的先后顺序
# Return a type's method resolution order查看源代码
# print(Prentice.mro())
# print(Prentice.__mro__)
# [,
# ,
# ,
# ]
print(Prentice.mro())
print(Prentice.__mro__)
4.多层继承
# 1 定义master类 init方法 make_cake方法
class Master(object):
def __init__(self):
self.kongfu = '[传统方法]'
pass
def make_cake(self):
print(f'使用{self.kongfu}摊煎饼')
pass
# 2 定义HeimaSchool类 /kongfu /make_cake
class HeimaSchool(object):
def __init__(self):
self.kongfu = '[黑马配方]'
pass
def make_cake(self):
print(f'使用{self.kongfu}摊煎饼')
pass
# 3 定义徒弟类 继承Master HeimaSchool
class Prentice(Master, HeimaSchool):
def __init__(self):
self.kongfu = '[独创摊煎饼技术]'
pass
def make_cake(self):
print(f'使用{self.kongfu}摊煎饼')
pass
# 通过父类名.方法名(self)来调用父类的方法
def make_master_cake(self):
Master.__init__(self)
Master.make_cake(self)
pass
def make_school_cake(self):
HeimaSchool.__init__(self)
HeimaSchool.make_cake(self)
pass
# 4 徒孙类 继承徒弟类
class Tusun(Prentice):
pass
if __name__ == '__main__':
# 1 实例化 徒孙类对象
mytusun01 = Tusun()
# 2 调用各种煎饼果子方法
mytusun01.make_cake()
mytusun01.make_master_cake()
mytusun01.make_school_cake()
print('多层继承 End')
5.私有属性和方法
# 1 设置私有属性和方法语法: 双下划线开头 eg: self.__money def __make_cake()
# 2 私有属性和方法只能在类的内部使用, 不能被继承
# 3 私有属性通过set_xxx get_xxx方法 获取和修改
# 4 私有方法, 再设置一个公共接口来访问
# 5 总之: 私有属性和私有方法,只能在类的内部使用,不能在类的外部使用. 如果想用则通过公共接口使用
# 1 定义ma
