# 类与对象

URL: https://caijiao.org/python/ch08/class-object
Source: docs/python/ch08/class-object.md
Description: 本章介绍面向对象编程的核心概念——类与对象，通过 Python 的语法深入理解封装、实例化、属性与方法等基础内容。

[Python](/python/) 是一门支持面向对象编程的语言。类与对象是 OOP 的基础，帮助我们将数据与行为组织到一个结构中，实现代码的重用与模块化。

## 什么是类与对象

- **类（Class）**：定义一类事物的属性和行为，是模板。
- **对象（Object）**：根据类创建的具体实例，是实际存在的个体。

## 定义类

使用 `class` 关键字定义类：

```python
class Dog:
    def bark(self):
        print("汪汪！")
```

## 创建对象

使用类名加括号来实例化对象：

```python
d = Dog()
d.bark()  # 输出：汪汪！
```

## 构造方法 `__init__`

在对象创建时初始化属性：

```python
class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(f"{self.name} 汪汪叫")

dog1 = Dog("旺财")
dog1.bark()
```

## 属性与方法

- **属性**：通过 `self` 引用，用于存储数据。
- **方法**：类中定义的函数，第一个参数必须是 `self`，代表当前对象。

```python
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"你好，我是 {self.name}，今年 {self.age} 岁。")
```

## 修改与访问属性

```python
p = Person("小明", 18)
print(p.name)
p.age = 20
```

## 内置方法与魔术方法

Python 中的类可定义一些特殊方法（以 `__` 开头结尾）：

- `__init__`: 构造函数
- `__str__`: 自定义打印信息
- `__len__`: 自定义 `len()` 行为

```python
class Book:
    def __init__(self, title):
        self.title = title

    def __str__(self):
        return f"《{self.title}》"

b = Book("Python 入门")
print(b)  # 输出： 《Python 入门》
```

## 总结

- 类是对象的模板，对象是类的实例；
- 使用 `__init__` 方法初始化属性；
- 所有类方法都需传入 `self` 参数；
- 可以通过定义魔术方法增强对象的行为表现。

类与对象为后续学习继承、多态等 OOP 特性打下基础。
