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

ops/2024/9/23 3:35:16/

示例代码:

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/ops/30229.html

相关文章

ICode国际青少年编程竞赛- Python-1级训练场-基础训练1

ICode国际青少年编程竞赛- Python-1级训练场-基础训练1 1、 Dev.step(4)2、 Dev.step(-4) Dev.step(8)3、 Dev.turnLeft() Dev.step(4)4、 Dev.step(3) Dev.turnLeft() Dev.step(-1) Dev.step(4)5、 Dev.step(-1) Dev.step(3) Dev.step(-2) Dev.turnLeft() Dev.step(…

【云原生】Docker 实践(一):在 Docker 中部署第一个应用

Docker 实践(一):在 Docker 中部署第一个应用 1.使用 YUM 方式安装 Docker2.验证 Docker 环境3.在 Docker 中部署第一个应用3.1 小插曲:docker pull 报 missing signature key 错误3.2 重新安装 Nginx 1.使用 YUM 方式安装 Docker…

引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展

4月27日至29日,2024耒耜国际会议在江苏大学召开。科东软件作为特邀嘉宾出席此次盛会,并为江苏大学-科东软件“农业机器人操作系统”联合实验室揭牌。 校企联合实验室揭牌 在开幕式上,江苏大学、科东软件、上交碳中和动力研究院、遨博智能研究…

Kafka如何将消息发送到指定分区

背景 面试一个时,面试官问了一个问题,Kafka如何做到顺序消息。我回答只给Kafka的Topic创建一个分区,发送到该Topic的消息在Kafka中就是有序的。 面试官又问,如果Topic有多个分区呢?我回答消息发送者在发送消息的时候…

【C语言实现贪吃蛇】(内含源码)

前言:首先在实现贪吃蛇小游戏之前,我们要先了解Win32 API的有关知识 1.Win32 API Windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外,它同时也是一个很大的服务中心,调佣这个中心的各种服务(每一…

Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合

前言 在当今信息爆炸的时代,数据已成为企业决策和发展的关键。而互联网作为信息的主要来源,网页中蕴含着大量的数据等待被挖掘。Python爬虫技术和数据可视化工具的结合,为我们提供了一个强大的工具箱,可以帮助我们从网络中抓取数…

selenium 4.20.0 访问外网问题

保存信息:There was an error managing chromedriver (error sending request for url (https://storage.googleapis.com/chrome-for-testing-public/124.0.6367.91/win64/chromedriver-win64.zip)); using driver found in the cache 报错原因:因为sel…

Java实现二叉树(简单版)

1.先定义节点 /*定义一个树节点*/ public class TreeNode {int val; //存储值TreeNode left; //左子树TreeNode right; //右子树//无参构造方法TreeNode (){}//有参构造方法TreeNode(int val){this.valval;}TreeNode(int val,TreeNode left,TreeNode right){this.v…