1. 概述

  • **实例方法(Instance Method)**:绑定对象实例,可操作实例属性
  • **类方法(Class Method)**:绑定类本身,可操作类属性
  • **静态方法(Static Method)**:独立工具函数,不绑定实例或类

2. 实例方法

基本特性

  • 定义格式:默认第一个参数为self
  • 访问权限:可访问实例属性和类属性
  • 调用方式:必须通过类实例调用

代码示例

class MyClass:
def instance_method(self):
print(f"实例方法调用,实例属性: {self.instance_attr}")
print(f"类属性: {MyClass.class_attr}")

obj = MyClass()
obj.instance_attr = "Hello"
MyClass.class_attr = "World"
obj.instance_method()

3. 类方法

基本特性

  • 定义格式:使用@classmethod装饰器,第一个参数为cls
  • 访问权限:只能访问类属性
  • 调用方式:可通过类或实例调用

代码示例

class MyClass:
class_attr = "原始值"

@classmethod
def class_method(cls):
print(f"类方法调用,修改前类属性: {cls.class_attr}")
cls.class_attr = "新值"
print(f"修改后类属性: {cls.class_attr}")

MyClass.class_method() # 通过类调用
obj = MyClass()
obj.class_method() # 通过实例调用

4. 静态方法

基本特性

  • 定义格式:使用@staticmethod装饰器,无默认参数
  • 访问权限:不能访问实例或类属性
  • 调用方式:可通过类或实例调用

代码示例

class MyClass:
@staticmethod
def static_method(num):
print(f"静态方法调用,参数平方: {num ** 2}")

MyClass.static_method(5) # 通过类调用
obj = MyClass()
obj.static_method(3) # 通过实例调用

代码实例对比

class 汽车工厂:
默认颜色 = "白色" # 类属性(所有车默认颜色)

def __init__(self, 型号):
self.型号 = 型号 # 实例属性(每辆车的型号不同)

# 实例方法:操作具体汽车
def 改颜色(self, 新颜色):
print(f"把 {self.型号} 的颜色改成 {新颜色}")
self.颜色 = 新颜色

# 类方法:操作整个工厂
@classmethod
def 换默认颜色(cls, 新颜色):
print(f"工厂所有新车的默认颜色改为 {新颜色}")
cls.默认颜色 = 新颜色 # 修改类属性

# 静态方法:独立工具
@staticmethod
def 计算油耗(公里数, 排量):
return 公里数 * 排量 * 0.01

# ------------------ 使用场景 -------------------
# 1. 实例方法:操作具体对象
我的车 = 汽车工厂("SUV")
我的车.改颜色("红色") # 正确:修改具体车的颜色

# 2. 类方法:修改工厂设置
汽车工厂.换默认颜色("蓝色") # 正确:所有新车变蓝色
新车 = 汽车工厂("轿车")
print(新车.颜色) # 输出:蓝色(因为类属性被修改)

# 3. 静态方法:独立计算
油耗 = 汽车工厂.计算油耗(100, 2.0) # 正确:无需具体车或工厂
print(f"油耗:{油耗}升") # 输出:油耗:2.0升