3.10 Python3 面向对象--方法

在Python面向对象编程中,类的方法主要分为五种类型:实例方法类方法静态方法方法重载特殊方法(魔术方法)。它们的核心区别体现在参数传递、调用方式和设计用途上。


目录

1. 实例方法 (Instance Method)

2. 类方法 (Class Method)

3. 静态方法 (Static Method)

4. 方法重载 (Method Overloading)

5. 特殊方法/魔术方法 (Magic Method)

对比总结表

关键区别记忆点


1. 实例方法 (Instance Method)

  • 定义:第一个参数必须是self(指向实例对象)

  • 调用:通过实例调用(自动传递self

  • 用途:操作实例属性和实例状态

  • 特点:能访问和修改实例的所有属性和方法

  • 示例

    class Dog:
        def __init__(self, name):
            self.name = name
        
        def bark(self):  # 实例方法
            print(f"{self.name}汪汪叫!")
    
    dog = Dog("阿黄")
    dog.bark()  # 输出:阿黄汪汪叫!

2. 类方法 (Class Method)

  • 定义:使用@classmethod装饰器,第一个参数必须是cls(指向类本身)

  • 调用:可通过类或实例调用(自动传递cls

  • 用途:操作类属性或实现工厂模式

  • 特点:不能访问实例属性,但能修改类状态

  • 示例

    class Dog:
        species = "犬科"
        
        @classmethod
        def get_species(cls):
            return cls.species  # 访问类属性
    
    print(Dog.get_species())  # 输出:犬科

3. 静态方法 (Static Method)

  • 定义:使用@staticmethod装饰器,无强制参数

  • 调用:可通过类或实例调用

  • 用途:实现与类相关但不需要访问类/实例状态的工具函数

  • 特点:类似于普通函数,只是逻辑上属于类

  • 示例

    class MathUtils:
        @staticmethod
        def add(a, b):
            return a + b
    
    print(MathUtils.add(3, 5))  # 输出:8

4. 方法重载 (Method Overloading)

  • Python特性:Python不支持传统重载(同名不同参),但可通过以下方式模拟:

    • 默认参数def method(self, x, y=None)

    • 可变参数def method(self, *args)

  • 用途:根据参数类型/数量实现不同行为

  • 示例

    class Calculator:
        def add(self, a, b, c=0):  # 模拟重载
            return a + b + c
    
    calc = Calculator()
    print(calc.add(2, 3))    # 输出:5
    print(calc.add(2, 3, 4)) # 输出:9

5. 特殊方法/魔术方法 (Magic Method)

  • 定义:双下划线命名(如__init____str__

  • 调用:由Python自动触发(如运算符或内置函数)

  • 用途:重载运算符或定义对象行为

  • 常见方法

    方法名触发场景
    __init__对象初始化时调用
    __str__print(obj)时调用
    __add__obj1 + obj2时调用
    __getitem__obj[key]时调用
  • 示例

    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(2, 3)
    v2 = Vector(4, 5)
    print(v1 + v2)  # 输出:Vector(6, 8)

对比总结表

方法类型装饰器首参数可访问实例属性可访问类属性典型用途
实例方法self操作实例数据
类方法@classmethodcls操作类状态或工厂方法
静态方法@staticmethod工具函数(与类逻辑相关)
方法重载自定义取决于实现取决于实现根据参数实现不同行为
特殊方法约定自定义对象行为(如运算符重载)

关键区别记忆点

  1. self vs cls

    • 实例方法操作实例(self

    • 类方法操作类本身(cls

  2. 是否需要实例化

    • 类方法和静态方法可通过类直接调用

    • 实例方法必须通过实例调用

  3. 设计哲学差异

    • 实例方法:面向对象的核心(对象行为)

    • 类方法:面向类的操作

    • 静态方法:消除对类和实例的依赖

    • 特殊方法:Python对象模型的底层协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值