python 如何判断是函数还是方法 (function or method)

embedded/2024/9/23 5:16:26/

示例代码:

python">
def function">test_fn():passclass Test(object):@staticmethoddef function">s_fn():pass@classmethoddef function">c_fn(cls):passdef function">my_fn(self):pass

如何判断是可调用的方法:

python">hasattr(test_fn, '__call__')  # true
hasattr(Test.s_fn, '__call__')  # true
hasattr(Test.c_fn, '__call__')  # true
hasattr(Test().my_fn, '__call__')  # true
# 内置函数callable也可以用于判断
callable(test_fn)  # true

__call__属性和callable函数都无法区分出是函数还是方法(function or method

此时可借助inspect模块进行判断

python">import inspectinspect.ismethod(test_fn)  # false
inspect.ismethod(Test.s_fn)  # false 静态方法其实是function
inspect.ismethod(Test.c_fn)  # true 类方法是method
inspect.ismethod(Test().my_fn)  # trueinspect.isfunction(test_fn)  # true
inspect.isfunction(Test.s_fn)  # true
inspect.isfunction(Test.c_fn)  # false

函数和方法的区别function vs method
在 Python 中,方法和函数具有相似的用途,但在重要方面有所不同。

  • 函数是可以从任何地方调用的独立代码块;
  • 而方法则与对象或类绑定,需要调用对象或类实例。

http://www.ppmy.cn/embedded/30360.html

相关文章

C# var 关键字

在C#中,var 是一个关键字,用于声明一个隐式类型的局部变量。当使用 var 声明变量时,编译器会根据变量的初始化表达式推断出变量的具体类型,并将其隐式地设置为推断出的类型。 下面是对C#中 var 类型的详细解释和示例说明&#xf…

CAPM模型(Capital Asset Pricing Model)注意事项

1. CAPM模型是一个风险和回报的理论模型,用于计算资本资产的预期回报率。 2. CAPM模型的基本假设是市场上的风险资产可以被分为系统风险和非系统风险。系统风险是不可通过分散投资而消除的风险,而非系统风险可以通过分散投资而消除。 3. 根据CAPM模型&am…

代码随想录算法训练营DAY51|C++动态规划Part12|1143.最长公共子序列、1035.不相交的线、53.最大子序列和

文章目录 1143.最长公共子序列思路CPP代码 1035.不相交的线53.最大子序列和思路CPP代码 1143.最长公共子序列 力扣题目链接 文章讲解:1143.最长公共子序列 视频讲解:动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列 本题其实就跟…

wordpress外贸独立站建站10要10不要

创建一个成功的WordPress外贸独立站需要注意很多因素。以下是zhanyes根据多年建站经验总结的wordpress外贸独立站建站的10个建议和10个避免的事项,以帮助您建立一个高质量的外贸网站: 10个要: 1. 要选择合适的域名:确保您的域名…

Java项目:基于SSM框架实现的实践项目管理系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的实践项目管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff…

windows驱动开发-电源状态(一)

在windows设备驱动开发中,随着笔记本电脑的普及,低功耗要求的增加,设备电源状态越来越重要,和之前不一样,在以前,驱动仅仅只处理PNP的电源状态而已,现在需要处理非常多的电源状态和请求。 系统…

【SpringBoot】Spring Boot自动配置概览

目录 背景自动装配/自动配置springboot是如何实现自动配置的核心注解AutoConfigurationImportSelector 类的继承体系Spring Boot 提供的条件注解示例注意版本 背景 没有 Spring Boot 的情况下,我们引入第三方依赖之后,需要手动配置。 比如需要手动将引入…

【c语言实现内核链表】

在C语言中实现内核链表可以参考以下步骤: 定义链表节点结构:创建一个表示链表节点的结构体,通常包含一个数据成员和一个指向下一个节点的指针。 struct ListNode {// 数据成员int data;// 指向下一个节点的指针struct ListNode* next; };初…