从0开始转入Ai应用层,从python学起第十天
·
一、面向对象核心概念速览
| 概念 | 说明 |
|---|---|
| 类 (Class) | 创建对象的蓝图或模板,定义属性和方法 |
| 对象 (Object) | 类的实例,具体实现了类中定义的行为 |
| 属性 (Attribute) | 保存在对象中的数据,代表对象的状态 |
| 方法 (Method) | 定义在类中的函数,对对象进行操作 |
| 继承 (Inheritance) | 一个类继承另一个类的属性和方法,促进代码复用 |
| 封装 (Encapsulation) | 隐藏对象的实现细节,只暴露有限接口 |
| 多态 (Polymorphism) | 对象根据引用类型展现不同的形态 |
二、类的基本定义格式
最简单定义:
class 类名:
pass
完整示例(使用构造方法 __init__):
class User:
# 构造方法,创建对象时自动执行
def __init__(self, name, age, sex):
self.name = name # 实例属性
self.age = age
self.sex = sex
# 实例方法
def show(self):
print(f"我叫:{self.name},今年:{self.age},性别:{self.sex}")
def jk(self):
print("我爱看书")
# 实例化(创建对象)
user1 = User("张三", 18, "男")
user1.show() # 我叫:张三,今年:18,性别:男
user1.jk() # 我爱看书
关键知识点:
__init__是构造方法,创建对象时自动执行,用于初始化属性。self是必须的第一个参数,代表当前对象实例,调用时无需手动传值。- 类名建议使用大驼峰命名法(每个单词首字母大写,如
UserInfo)。
三、实例属性 vs 类属性
| 类型 | 定义位置 | 归属 | 特点 |
|---|---|---|---|
| 实例属性 | __init__ 中用 self.xxx 定义 |
每个对象独立拥有 | 修改一个不影响其他对象 |
| 类属性 | 类内部、__init__ 之外定义 |
所有对象共享 | 一处修改,所有对象都受影响 |
class Student:
school = "第一中学" # 类属性(共享)
def __init__(self, name, age):
self.name = name # 实例属性(独有)
self.age = age
# 访问类属性
print(Student.school) # 第一中学
# 访问实例属性
s1 = Student("张三", 18)
print(s1.name) # 张三
print(s1.school) # 第一中学(自己没有,从类中找)
四、方法的分类(四种)
1. 实例方法(最常用)
- 第一个参数必须是
self - 只能通过对象调用
- 可以访问实例属性和类属性
class Student:
def show(self): # 实例方法
print(f"我叫:{self.name},今年:{self.age}")
user1 = Student()
user1.name = "张三"
user1.age = 18
user1.show() # 通过对象调用
2. 类方法
- 用
@classmethod装饰 - 第一个参数是
cls(指向类本身) - 可以通过类名或对象调用
- 只能访问类属性,不能访问实例属性
- 用途:修改类属性、创建工厂方法
class Student:
school = "中学"
@classmethod
def change_school(cls, name): # 类方法
cls.school = name
Student.change_school("大学")
print(Student.school) # 大学
3. 静态方法
- 用
@staticmethod装饰 - 没有默认参数(没有
self或cls) - 可以通过类名或对象调用
- 不能直接访问实例属性或类属性
- 用途:与类相关的工具函数
class Student:
@staticmethod
def add(x, y): # 静态方法
return x + y
print(Student.add(2, 3)) # 5,直接用类名调用,无需实例化
4. 特殊方法(魔术方法)
- 格式为
__xxx__(双下划线开头和结尾) - 在特定情况下由Python自动调用
- 让自定义类支持Python内置操作
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self): # 特殊方法,print对象时自动调用
return f"学生:{self.name},年龄:{self.age}"
s = Student("张三", 18)
print(s) # 学生:张三,年龄:18
五、方法类型对比总结
| 方法类型 | 装饰器 | 第一个参数 | 可访问 | 典型用途 | 调用方式 |
|---|---|---|---|---|---|
| 实例方法 | 无 | self |
实例属性、类属性 | 对象操作 | 对象调用 |
| 类方法 | @classmethod |
cls |
类属性 | 类级别操作 | 类名或对象调用 |
| 静态方法 | @staticmethod |
无 | 不能直接访问 | 工具函数 | 类名或对象调用 |
| 特殊方法 | 无 | self |
实例属性 | 内置操作支持 | 自动调用 |
六、类对象 vs 实例对象
| 概念 | 比喻 | 说明 |
|---|---|---|
| 类对象 | 汽车设计图纸 | 定义类时Python自动创建,存储类属性和方法,是创建实例的模板 |
| 实例对象 | 根据图纸造出的具体汽车 | 通过 类名() 创建,拥有独立的实例属性 |
核心特性:
- 类本身也是一个对象(类对象),即使没创建任何实例也存在。
- 类对象可以动态添加或删除属性(Python动态特性)。
- 属性查找规则:先找实例自己的属性,没有再去类对象中找。
class Car:
def __init__(self, name, color):
self.name = name
self.color = color
def show(self):
print(f"汽车名称:{self.name},汽车颜色:{self.color}")
# 创建实例对象
c1 = Car("保时捷", "蓝色")
c1.show()
# 动态给实例添加属性
c1.price = "100万"
print(c1.price) # 100万
# 删除动态属性
del c1.price
七、重要注意事项
- 命名规范:类名使用大驼峰命名法(每个单词首字母大写,如
StudentInfo)。 self参数:实例方法的第一个参数必须是self,代表当前对象,调用时不需要手动传递。__init__方法:是初始化方法(不是构造函数),在对象创建后自动调用,用于初始化实例属性。- 属性可见性约定(Python没有真正的私有属性):
public:公有属性,直接访问。_protected:单下划线开头,约定为受保护属性。__private:双下划线开头,名称会被改写(伪私有)。__magic__:双下划线开头结尾,魔术方法。
今日核心总结
-
类 = 模板:用
class关键字定义,包含属性(数据)和方法(行为)。类是创建对象的蓝图。 -
__init__= 初始化:构造方法,创建对象时自动执行,self代表当前对象实例。 -
三大成员类型:
- 实例属性(
self.xxx):每个对象独有。 - 类属性(类内、
__init__外定义):所有对象共享。 - 方法:实例方法(
self)、类方法(@classmethod+cls)、静态方法(@staticmethod)。
- 实例属性(
-
类也是对象:类对象存储共享数据和方法,实例对象存储独有数据。属性查找规则:先实例后类。
-
四种方法速记:
- 实例方法:操作对象数据,用
self。 - 类方法:操作类数据,用
@classmethod和cls。 - 静态方法:工具函数,用
@staticmethod,不需要self或cls。 - 特殊方法:
__xxx__格式,Python自动调用。
- 实例方法:操作对象数据,用
注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)