实例方法 (Instance Method)
最常用,必须通过类的实例调用,第一个参数是 self
(指向实例本身)。
class MyClass:def instance_method(self, arg1, arg2):print(f"实例方法被调用,self={self}, args={arg1}, {arg2}")# 使用
obj = MyClass()
obj.instance_method("参数1", "参数2") # 自动传递 self
特点:
- 可以访问和修改实例属性 (
self.xxx
) - 可以访问类属性 (
self.__class__.xxx
)
2. 类方法 (Class Method)
用 @classmethod
装饰器定义,第一个参数是 cls
(指向类本身),无需创建实例即可调用。
python
class MyClass:class_var = "类变量"@classmethoddef class_method(cls, arg1):print(f"类方法被调用,cls={cls}, 类变量={cls.class_var}, arg1={arg1}")# 使用
MyClass.class_method("参数1") # 无需实例化
obj = MyClass()
obj.class_method("参数1") # 也可以通过实例调用
常用场景:
- 工厂模式(创建类的不同实例)
- 操作类变量(不依赖实例状态)
3. 静态方法 (Static Method)
用 @staticmethod
装饰器定义,无 self
或 cls
参数,类似于普通函数,但属于类的命名空间。
class MyClass:@staticmethoddef static_method(arg1, arg2):print(f"静态方法被调用,args={arg1}, {arg2}")# 使用 MyClass.static_method("参数1", "参数2") # 无需实例化 obj = MyClass() obj.static_method("参数1", "参数2") # 也可以通过实例调用
常用场景:
- 工具函数(与类相关但不需要访问实例或类状态)
- 代码组织(将逻辑归类到类中)
对比总结
最常用的方法
- 实例方法(90%场景):处理实例-specific 的逻辑。
- 类方法(5%场景):工厂方法或操作类变量。
- 静态方法(5%场景):工具函数。
如何选择?
- 需要访问实例属性? → 实例方法
- 需要访问类属性但不依赖实例? → 类方法
- 只是逻辑上属于类,无需访问类或实例? → 静态方法
示例场景:
class Pizza:def __init__(self, ingredients):self.ingredients = ingredients# 实例方法def describe(self):print(f"披萨配料: {self.ingredients}")# 类方法(工厂模式)@classmethoddef margherita(cls):return cls(["番茄", "芝士"])# 静态方法@staticmethoddef calculate_area(radius):return 3.14 * radius ** 2# 使用
p1 = Pizza.margherita() # 类方法创建实例
p1.describe() # 实例方法
area = Pizza.calculate_area(10) # 静态方法