Files
python/Class
2025-09-08 22:38:47 +08:00
..
2025-09-08 22:38:47 +08:00
2025-09-08 21:11:28 +08:00

好的,我来帮你系统梳理 Python 类class 的全部核心知识点,包括语法、属性、方法、继承、特殊方法等,适合作为 Python 类的完整参考手册。我会尽量详尽、条理清晰。


Python 类class完整知识总结


1 基础语法

class ClassName(BaseClass):
    """类的文档字符串"""
    
    class_attribute = 0  # 类属性

    def __init__(self, arg1, arg2):
        self.arg1 = arg1   # 实例属性
        self.arg2 = arg2

    def method(self):
        print(self.arg1, self.arg2)
  • class ClassName: → 定义类
  • BaseClass → 可选,继承自父类
  • __init__ → 构造函数(实例化时自动调用)
  • self → 指向实例本身,必须作为实例方法的第一个参数
  • 类属性 → 所有实例共享
  • 实例属性 → 每个实例独立

2 实例化和使用

obj = ClassName(10, 20)
obj.method()  # 调用实例方法
print(obj.arg1)  # 访问实例属性
print(ClassName.class_attribute)  # 访问类属性

3 类属性 vs 实例属性

class Example:
    class_var = 100  # 类属性

    def __init__(self, x):
        self.instance_var = x  # 实例属性

e1 = Example(1)
e2 = Example(2)

print(e1.class_var, e2.class_var)  # 100 100
print(e1.instance_var, e2.instance_var)  # 1 2
  • 修改类属性:Example.class_var = 200
  • 修改实例属性:e1.instance_var = 10

4 方法类型

方法类型 装饰器 特点
实例方法 无或 @property 第一个参数是 self,只能通过实例调用
类方法 @classmethod 第一个参数是 cls,可以通过类或实例调用
静态方法 @staticmethod 无默认参数,可通过类或实例调用
class Demo:
    class_var = 0

    def instance_method(self):
        print("实例方法", self.class_var)

    @classmethod
    def class_method(cls):
        print("类方法", cls.class_var)

    @staticmethod
    def static_method():
        print("静态方法")

5 继承与多态

class Parent:
    def greet(self):
        print("Hello from Parent")

class Child(Parent):
    def greet(self):
        print("Hello from Child")

c = Child()
c.greet()  # 输出 Child 的 greet → 多态
  • Python 支持 单继承多继承
  • super() 调用父类方法:
class Child(Parent):
    def greet(self):
        super().greet()  # 调用父类方法
        print("Hello from Child")

6 特殊方法(魔法方法)

方法 功能
__init__(self, ...) 构造函数
__str__(self) print(obj) 输出
__repr__(self) 交互式显示或 repr(obj)
__len__(self) len(obj)
__getitem__(self, key) 支持索引访问 obj[key]
__setitem__(self, key, value) 支持索引赋值
__delitem__(self, key) 支持删除 del obj[key]
__iter__(self) / __next__(self) 可迭代对象
__eq__, __lt__, __gt__, ... 支持比较运算符
__add__, __sub__, ... 支持运算符重载

示例:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __str__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(1,2)
v2 = Vector(3,4)
print(v1 + v2)  # Vector(4,6)

7 属性访问控制

Python 没有严格私有化,但通过命名约定控制访问:

  • 公有属性:self.x → 可在类外访问
  • 受保护属性:self._x → 建议类外少用
  • 私有属性:self.__x → 名字改写,类外不易访问
class Test:
    def __init__(self):
        self.public = 1
        self._protected = 2
        self.__private = 3

t = Test()
print(t.public)       # 1
print(t._protected)   # 2
print(t._Test__private)  # 3 → 私有属性访问技巧

8 属性装饰器getter/setter

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):      # getter
        return self._name

    @name.setter
    def name(self, value):  # setter
        self._name = value

p = Person("Alice")
print(p.name)
p.name = "Bob"

9 类方法总结

  • self → 实例方法,访问实例属性
  • cls → 类方法,访问类属性
  • 静态方法 → 无默认参数,可独立使用
  • @property → 用方法访问属性,控制读写

10 进阶概念

  • 多继承 & MRO方法解析顺序

    • Python 按 C3线性化算法 决定方法调用顺序
  • 组合 vs 继承

    • 类可以包含其他类实例,实现复合功能
  • 抽象类 & 接口

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

11 Python 类的总结

  1. 定义与实例化 → class + init + self
  2. 属性 → 类属性 vs 实例属性
  3. 方法 → 实例方法 / 类方法 / 静态方法
  4. 继承与多态 → super() 调用父类方法
  5. 特殊方法 → 魔法方法,实现运算符、索引、迭代等
  6. 访问控制 → 公有 / 受保护 / 私有
  7. 装饰器 → @property 控制访问

我可以帮你画一张 Python 类知识全景图,把 类结构、属性、方法、继承、魔法方法、访问控制、装饰器 全部整理成一张图,非常直观易记。

你希望我画吗?