【入门】Python类方法有几种?常用的有哪种?怎么用呢?
实例方法 (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 = "类变量"
@classmethod
def 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: @staticmethod def 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}")
# 类方法(工厂模式)
@classmethod
def margherita(cls):
return cls(["番茄", "芝士"])
# 静态方法
@staticmethod
def calculate_area(radius):
return 3.14 * radius ** 2
# 使用
p1 = Pizza.margherita() # 类方法创建实例
p1.describe() # 实例方法
area = Pizza.calculate_area(10) # 静态方法