一、面向对象核心概念速览

概念 说明
类 (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 装饰
  • 没有默认参数(没有 selfcls
  • 可以通过类名或对象调用
  • 不能直接访问实例属性或类属性
  • 用途:与类相关的工具函数
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

七、重要注意事项

  1. 命名规范:类名使用大驼峰命名法(每个单词首字母大写,如 StudentInfo)。
  2. self 参数:实例方法的第一个参数必须是 self,代表当前对象,调用时不需要手动传递。
  3. __init__ 方法:是初始化方法(不是构造函数),在对象创建后自动调用,用于初始化实例属性。
  4. 属性可见性约定(Python没有真正的私有属性):
    • public:公有属性,直接访问。
    • _protected:单下划线开头,约定为受保护属性。
    • __private:双下划线开头,名称会被改写(伪私有)。
    • __magic__:双下划线开头结尾,魔术方法。

今日核心总结

  1. 类 = 模板:用 class 关键字定义,包含属性(数据)和方法(行为)。类是创建对象的蓝图。

  2. __init__ = 初始化:构造方法,创建对象时自动执行,self 代表当前对象实例。

  3. 三大成员类型

    • 实例属性(self.xxx):每个对象独有。
    • 类属性(类内、__init__外定义):所有对象共享。
    • 方法:实例方法(self)、类方法(@classmethod + cls)、静态方法(@staticmethod)。
  4. 类也是对象:类对象存储共享数据和方法,实例对象存储独有数据。属性查找规则:先实例后类。

  5. 四种方法速记

    • 实例方法:操作对象数据,用 self
    • 类方法:操作类数据,用 @classmethodcls
    • 静态方法:工具函数,用 @staticmethod,不需要 selfcls
    • 特殊方法:__xxx__ 格式,Python自动调用。

注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐