You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中函数与方法的区别:通用特性及缩进疑问

Python 函数(Function)与方法(Method)的核心区别

先直接给你厘清关键点:

1. 绑定关系才是本质区别,而非通用性或缩进

你说的「方法是类特有的函数」方向是对的,但更准确的表述是:

  • 函数是独立的代码块,不依附任何类或实例,直接就能调用,完全通用。比如随便在.py文件里写个def add(a, b): return a+b,直接add(1,2)就能运行,和任何类都没关系。
  • 方法是绑定到类或实例的函数,调用时会自动传递绑定对象作为第一个参数(实例方法是self,类方法是cls)。它的「特有性」不是因为写在类里,而是因为和类/实例绑定了。

举个代码例子:

# 这是独立函数
def greet(name):
    print(f"Hello, {name}!")

# 这是类里的方法
class Person:
    def greet(self, name):
        print(f"Hello, {name}! I'm {self.__class__.__name__}")

# 调用函数,直接传参数就行
greet("Alice")

# 调用方法,必须先有实例(或类,针对类方法)
p = Person()
p.greet("Bob")  # 这里Python自动把p作为self传进去

2. 缩进只是语法表现,不是本质区别

你看到的「方法在类内缩进、函数在类外无缩进」只是Python定义类成员的语法规则,不是两者的核心差异:

  • 你可以在函数里嵌套另一个缩进的函数,但它依然是普通函数,不是方法:
def outer():
    # 这个inner是嵌套函数,缩进了,但不是方法
    def inner():
        print("I'm nested, but still a function")
    inner()
  • 反过来,你可以把一个独立函数绑定到类实例上,让它变成方法,这时候它根本没写在类里:
import types

def greet_func(self, name):
    print(f"Hello {name}, from {self}")

class Person:
    pass

p = Person()
# 把函数绑定为实例的方法
p.greet = types.MethodType(greet_func, p)
p.greet("Charlie")  # 这里会自动把p作为self传入,完全是方法的调用方式

总结

  • 核心区别:是否与类/实例绑定,方法调用时会自动传入绑定对象,函数不会。
  • 通用性:函数确实是通用独立的,方法则依赖绑定的类/实例。
  • 缩进:只是Python定义类成员的语法形式,不是本质区别。

内容的提问来源于stack exchange,提问作者randomvlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:10:36