网易首页 > 网易号 > 正文 申请入驻

Python:函数与方法

0
分享至

在 Python 编程中,函数(function)与方法(method)是两个紧密相关但语义不同的可调用对象。二者在表面语法上十分接近,但在 Python 对象模型、描述符协议以及面向对象设计中具有本质差异。理解函数与方法之间的关系,是深入掌握 Python 面向对象系统的关键。

一、基本概念:函数与方法的本质

(1)函数:独立的可调用对象

在 Python 中,函数是一等对象(first-class object)。其本质是一个封装了可执行代码块的对象,能够被引用、存储、传递并调用。

函数的典型特征包括:

• 定义位置独立:可定义在模块级、类体外、类体内、函数内部(闭包)。

• 调用方式独立:函数对象本身不会隐式接收调用者。

• 状态独立:不依赖特定实例或类的状态(除非显式访问)。

示例:

    return width * height

(2)方法:函数经描述符绑定后形成的运行时对象

在类体内用 def 定义的对象首先是函数对象。但由于函数对象实现了 __get__ 描述符协议,当它通过实例或类访问时,会被转换为不同形式的绑定方法对象。

方法的本质是:

• 由定义在类体内的函数通过描述符机制在访问时生成的运行时对象(method object)。

• 绑定目标不同,则方法种类不同。

常见方法类型:

• 实例方法:经实例访问后形成,绑定目标为实例。

• 类方法:绑定目标为类对象。

• 静态方法:不进行绑定。

示例:

print(type(rect.area))         #

area 在类体内是一个函数;rect.area 则是一个绑定方法对象。

二、函数与方法的主要差异

(1)定义位置与命名空间

函数可以定义在任何作用域。

在类体内定义的函数不会立刻变成方法,它只是类命名空间中的一个函数对象。

方法是访问函数时根据描述符协议生成的运行时对象。

(2)参数绑定机制

函数调用时,参数需通过某种方式提供,例如:

calculate_area(3, 4)

实例方法的调用语义为:

rect.area()  # 语义:Rectangle.area.__get__(rect, Rectangle)() ⇔  Rectangle.area(rect)

注意:

不是解释器自动传 self,而是绑定方法对象在调用时将绑定目标作为第一个参数传入原始函数。

类方法同理,只是绑定目标为类对象。

静态方法不进行绑定。

(3)设计角色不同

函数:提供与对象状态无关的通用功能。

方法:封装对象的行为,体现面向对象模型。

三、方法的三种形式与描述符机制

3.1 方法的三种形式

Python 支持三种类型的方法,每种都有特定的用途和调用方式。

(1)实例方法(Instance Method)

        return self.balance

• 通过实例访问时变为绑定方法,自动传入 self。

• 通过类访问时返回原始函数,需要显式传入实例。

(2)类方法(Class Method)

        return cls.population

• 始终绑定类对象为第一个参数 cls。

• 无论通过类或实例访问都返回绑定方法。

(3)静态方法(Static Method)

        return a + b

• 不绑定任何对象(不传入 self 或 cls)。

• 调用语义等价于普通函数,但属于类命名空间,可继承与重写。

3.2 描述符协议:方法形成的核心机制

在类体内定义的函数具有 __get__ 方法,因此是。

不同访问方式对应不同行为:

type(obj.f)       # method

解释:

• Example.f → 函数对象(__get__(None, Example) 返回原函数)

• obj.f → 绑定方法对象(__get__(obj, Example) 返回 method)

classmethod 与 staticmethod 是特殊描述符,它们通过自身的 __get__ 改变绑定行为。

3.3 调用语义与实际行为

obj.static_method()      # 不绑定

绑定方法对象的调用语义统一为:

method(obj, *args)  →  method.__func__(obj, *args)

四、何时使用函数或方法

(1)使用函数的场景

• 与对象状态无关

• 工具性质逻辑

• 不需要继承、多态

(2)使用实例方法的场景

• 操作实例状态

• 表达对象行为

• 需要多态

(3)使用类方法的场景

• 操作类状态(类属性)

• 替代构造器

(4)使用静态方法的场景

• 与类语义相关,但不访问对象或类状态

• 希望组织在类命名空间中

五、常见误解与澄清

❌ 误解 1:“定义在类体中的函数就是方法”

✔ 它是函数,访问时通过 __get__ 才变成方法。

❌ 误解 2:“实例方法必须由实例调用”

✔ 类也可调用,只需显式传入实例。

❌ 误解 3:“静态方法本质就是普通函数”

✔ 调用上相同,但属于类命名空间,可继承与重写。

❌ 误解 4:“self 是特殊语法”

✔ 只是第一个参数的惯例命名,与绑定机制无关。

小结

在 Python 中,“函数”是独立的可调用对象;“方法”则是函数通过描述符协议在访问时生成的绑定方法对象。实例方法绑定实例,类方法绑定类,静态方法不绑定。函数强调独立性,方法强调面向对象的行为封装。理解二者关系,是理解 Python 面向对象模型的关键。


点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
这一次,哈梅内伊真的怕了!!!

这一次,哈梅内伊真的怕了!!!

山河路口
2026-01-27 12:42:53
心梗去世逐年增多?医生:牢记“3不喝、2不吃、1坚持”,别大意

心梗去世逐年增多?医生:牢记“3不喝、2不吃、1坚持”,别大意

袁医生课堂
2026-01-24 17:33:06
黄金站上5100美元创历史行情,全港唯一黄金矿业 ETF——易方达黄金矿(2824)火热申购中

黄金站上5100美元创历史行情,全港唯一黄金矿业 ETF——易方达黄金矿(2824)火热申购中

和讯网
2026-01-27 13:35:37
宁波律师叶子民涉嫌违纪违规被立案调查

宁波律师叶子民涉嫌违纪违规被立案调查

潮评社
2026-01-27 10:21:21
田家慌了!全网复刻田氏艺术,85岁雕塑家的遮羞布藏不住了

田家慌了!全网复刻田氏艺术,85岁雕塑家的遮羞布藏不住了

离离言几许
2026-01-26 12:26:16
被乌克兰名将打哭 俄18岁少女遭网协主席怒批:打法落后 没啥未来

被乌克兰名将打哭 俄18岁少女遭网协主席怒批:打法落后 没啥未来

风过乡
2026-01-27 07:45:18
什么是文明?看挪威富裕后如何对待自己的国民​

什么是文明?看挪威富裕后如何对待自己的国民​

深度报
2025-11-07 22:57:08
代孕只是冰山一角!张雨绮再迎2大噩耗,38岁就把未来的路封死

代孕只是冰山一角!张雨绮再迎2大噩耗,38岁就把未来的路封死

阿废冷眼观察所
2026-01-27 08:09:41
上海53岁男雇主病逝12分钟 36岁女保姆疯狂转账

上海53岁男雇主病逝12分钟 36岁女保姆疯狂转账

看看新闻Knews
2026-01-26 22:29:03
普京:乌克兰不割地,和平毫无可能;泽连斯基:没有100万乌军,欧洲无法独自面对 | 狼叔看世界

普京:乌克兰不割地,和平毫无可能;泽连斯基:没有100万乌军,欧洲无法独自面对 | 狼叔看世界

狼叔看世界
2026-01-24 15:41:25
蒋介石把红军当心腹大患,为何重庆谈判时下令:不许对毛泽东下手

蒋介石把红军当心腹大患,为何重庆谈判时下令:不许对毛泽东下手

元哥说历史
2026-01-27 13:35:03
纪实:劳荣枝临刑前一天,吃了碗肉丝细面,注射死刑表情极为扭曲

纪实:劳荣枝临刑前一天,吃了碗肉丝细面,注射死刑表情极为扭曲

谈史论天地
2026-01-26 17:05:03
周总理逝世21年后,中国银行核查账目时发现他名下存有巨额存款,一番调查后揭开了背后的真相

周总理逝世21年后,中国银行核查账目时发现他名下存有巨额存款,一番调查后揭开了背后的真相

寄史言志
2026-01-17 16:37:15
范晓萱做客鲁豫访谈,网友泪目,只因她谈吐与眉眼间竟与大s神似

范晓萱做客鲁豫访谈,网友泪目,只因她谈吐与眉眼间竟与大s神似

小娱乐悠悠
2026-01-27 10:23:52
“很后悔托举了他!”被丈夫和闺蜜背叛女子一夜白头:听到儿子叫第三者妈妈,心在滴血

“很后悔托举了他!”被丈夫和闺蜜背叛女子一夜白头:听到儿子叫第三者妈妈,心在滴血

台州交通广播
2026-01-26 22:00:12
沉默24小时后,卡尼终于发声,否认与中国签协议,美财长得寸进尺

沉默24小时后,卡尼终于发声,否认与中国签协议,美财长得寸进尺

通文知史
2026-01-27 13:45:03
杨广荒唐到什么程度?在皇宫内立下奇葩规矩,让妃子宫女十分难堪

杨广荒唐到什么程度?在皇宫内立下奇葩规矩,让妃子宫女十分难堪

铭记历史呀
2026-01-06 01:08:47
密密麻麻全是佛像!新西兰华人买下海景大房后,爆改后院,邻居看傻

密密麻麻全是佛像!新西兰华人买下海景大房后,爆改后院,邻居看傻

发现新西兰
2026-01-20 11:20:02
消失的150万契丹人找到了?DNA比对结果一出,原来就在我们身边

消失的150万契丹人找到了?DNA比对结果一出,原来就在我们身边

近史博览
2025-12-24 11:01:01
开油车的笑了,开电车的慌了?2026油电新政落地,税费规则全变了

开油车的笑了,开电车的慌了?2026油电新政落地,税费规则全变了

复转这些年
2026-01-26 23:47:10
2026-01-27 14:15:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1726文章数 72关注度
往期回顾 全部

科技要闻

理想开始关店“过冬”,否认“百家”规模

头条要闻

宝马5系车主揪出汽修店一个"意外疏忽":我气得吐血

头条要闻

宝马5系车主揪出汽修店一个"意外疏忽":我气得吐血

体育要闻

带着母亲遗愿战斗12年,交易添头成了队魂

娱乐要闻

张雨绮被曝代孕,春晚被拒,代言跑路

财经要闻

金价狂飙 “牛市神话”未完待续

汽车要闻

剑指小米YU7与特斯拉Model Y 问界M6要来了?

态度原创

艺术
房产
旅游
数码
手机

艺术要闻

日本东京国立博物馆中的100幅宋画

房产要闻

实景兑现在即!绿城,在海棠湾重新定义终极旅居想象!

旅游要闻

除了凤翔东湖,苏东坡还在陕西修了“奇怪”的路,你去过吗

数码要闻

苹果M4 Max秀肌肉:非原生运行卡普空3A游戏大作狂飙近100帧

手机要闻

消息称大疆Osmo Pocket 4云台相机标准版机型1月29日发布

无障碍浏览 进入关怀版