【Python】函数(function)和方法(method)的区别

这里先说结论,为了满足心急的小伙伴:methodfunction的最大区别就是参数有无进行绑定


自定义类Test:

首先先来一个自定义类:

class Test:def Func_normal(arg):print('Func_normal:',arg)@staticmethoddef Func_static(arg):print('Func_static:',arg)@classmethoddef Func_class(arg):print('Func_class:',arg)


代码样例:

先来一份代码以及运行结果:

obj=Test()#Test为本文开头提到的自定义类
for item in ['Test','obj']:print('\n'+('class'if item=='Test' else 'object'))for name in ['normal','static','class']:print(f'[{name}]',eval(f'{item}.Func_{name}'))

运行结果-1

为了更直观地看出差别,这里简单的编写一个表格:

属性访问[normal][@staticmethod][@classmethod]
classfunctionfunctionmethod-class
objectmethod-objectfunctionmethod-class

可以看出通过类和通过对象访问到的是不完全一致的,而这与本主题有关。
但是仅仅通过这个还不够直观地表现出它们的差异性,这里再附加一份测试代码以及运行结果:

obj=Test()#Test为本文开头提到的自定义类
for item in ['Test','obj']:for name in ['normal','static','class']:try:tx=f'{item}.Func_{name}()'print('>>>',tx)exec(tx)except Exception as e:print(e)print()

运行结果-2

这里同样贴心地将上面的结果整理成表格便于对比:

不传参数[normal][@staticmethod][@classmethod]
class<错误:缺失1参><错误:缺失1参>class
objectobject<错误:缺失1参>class


分析:

在上面的代码样例中得到两张表格,这里再重新把俩表格放在一起以便进行对比,请仔细比对俩表格之间的差异。

属性访问[normal][@staticmethod][@classmethod]
classfunctionfunctionmethod-class
objectmethod-objectfunctionmethod-class
不传参数[normal][@staticmethod][@classmethod]
class<错误:缺失1参><错误:缺失1参>class
objectobject<错误:缺失1参>class

以下为结论:

  • methodfunction的最大区别就是参数有无进行绑定。
  • 在本例中,method在调用时不需要参数,因为第一个参数已经与特定对象进行了绑定,而function需要传入1参数才能正常调用。
  • @classmethod的作用是将函数的第一个参数绑定为本类(无论是通过类还是类对象进行调用),@staticmethod的作用则是撤去第一个参数的绑定。


完整代码:

class Test:def Func_normal(arg):print('Func_normal:',arg)@staticmethoddef Func_static(arg):print('Func_static:',arg)@classmethoddef Func_class(arg):print('Func_class:',arg)obj=Test()
for item in ['Test','obj']:print('\n'+('class'if item=='Test' else 'object'))for name in ['normal','static','class']:print(f'[{name}]',eval(f'{item}.Func_{name}'))print('\n\n'+'——'*30+'\n\n')obj=Test()
for item in ['Test','obj']:for name in ['normal','static','class']:try:tx=f'{item}.Func_{name}()'print('>>>',tx)exec(tx)except Exception as e:print(e)print()

本文发布于CSDN,未经本人同意不得私自转载:https://blog.csdn.net/weixin_44733774/article/details/133509177

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147073.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sentinel-dashboard-1.8.0.jar开机自启动脚本

启动阿里巴巴的流控组件控制面板需要运行一个jar包&#xff0c;通常需要运行如下命令&#xff1a; java -server -Xms4G -Xmx4G -Dserver.port8080 -Dcsp.sentinel.dashboard.server127.0.0.1:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.0.jar &…

【小尘送书-第六期】《巧用ChatGPT轻松玩转新媒体运营》AI赋能运营全流程,帮你弯道超车、轻松攀登运营之巅

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

1.5 计算机网络的类别

思维导图&#xff1a; 1.5.1 计算机网络的定义 我的笔记&#xff1a; #### 精确定义&#xff1a; 计算机网络没有统一的精确定义&#xff0c;但一种较为接近的定义是&#xff1a;计算机网络主要由一些通用的、可编程的硬件互连而成&#xff0c;这些硬件并非专门用来实现某一特…

【软件测试】自动化测试selenium(一)

文章目录 一. 什么是自动化测试二. Selenium的介绍1. Selenium是什么2. Selenium的特点3. Selenium的工作原理4. SeleniumJava的环境搭建 一. 什么是自动化测试 自动化测试是指使用软件工具或脚本来执行测试任务的过程&#xff0c;以替代人工进行重复性、繁琐或耗时的测试活动…

vue中 css scoped原理

Vue中css的逻辑是先放子组件&#xff0c;然后放父组件&#xff0c;所以同样的css类名&#xff0c;子组件会被父组件覆盖 html 如下 子被父覆盖 scoped是通过给组件加hash值&#xff0c;锁定组件。 父子组件均scoped的情况下&#xff0c;子仍会覆盖 还是被覆盖了 如何避免被…

Springboo整合Sentinel

Springboo整合Sentinel 1.启动Sentinel java -jar sentinel-dashboard-1.8.6.jar2.访问localhost:8080到Sentinel管理界面(默认账号和密码都是sentinel) 3.引入依赖(注意版本对应) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spr…

[Linux] 5.Linux虚拟机和Windows文件共享

一、拖拽 如果安装了VMware Tool可以从Windows直接拖进Linux中共享文件&#xff0c;通过拖拽的方式可以把文件从Linux 传输到Windows 二、 文件共享 需要安装VMware Tool点击添加&#xff0c;选择Windows文件的路径&#xff0c;名称作为Linux访问的路径 cd什么都不加&#xff…

PCB铺铜连接方式

在铺铜前先把栅格吸附关闭铺铜会流畅很多 在嘉立创专业版中&#xff0c;默认铺铜方式是这样 改变铺铜规则为直连 效果如下

leetCode 55.跳跃游戏 贪心算法

给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入…

操作系统--分页存储管理

一、概念介绍 分页存储&#xff1a;一是分内存地址&#xff0c;二是分逻辑地址。 1.分内存地址 将内存空间分为一个个大小相等的分区。比如&#xff0c;每个分区4KB。 每个分区就是一个“页框”&#xff0c;每个页框有个编号&#xff0c;即“页框号”&#xff0c;“页框号”…

字符检测专题第二期:通用、简单、快速,见证AI字符识别的超能力!

随着科技的不断进步&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术在工业应用中扮演着越来越重要的角色。 在实际生产中&#xff0c;OCR技术可在生产流程监控、自动化设备控制、品质控制和物流控制等方面发挥作用&#xff0c;提高生产流水线的产量和质量&#xff0c…

mac系统占用内存太大怎么办?

Mac的内存大小有限&#xff0c;一旦运行软件太多&#xff0c;会导致Mac无法打开软件或者电脑卡顿&#xff0c;那么Mac系统占用内存过大怎么有效清理呢&#xff1f;本期小编就来帮大家看看当系统占用内存太大的时候应该怎么办 mac系统占用内存过大怎么清理 Mac的内存大小决定了…

【LeetCode热题100】--543.二叉树的直径

543.二叉树的直径 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 首先我们知道一条路径的长度为该路径经过的节…

2024免费的硬盘数据恢复软件有哪些?

在当今信息化的社会&#xff0c;数据成为了人们日常工作和生活的重要组成部分。不幸的是&#xff0c;数据丢失的问题也越来越普遍。硬盘数据恢复软件因此而产生&#xff0c;为那些不幸丢失数据的人们提供了救赎。在本文中&#xff0c;我们将介绍十大硬盘数据恢复软件。 一、Rec…

matplotlib从起点出发(9)_Tutorial_9_cycler

0 需求 绘图时有时需要指定几种颜色&#xff0c;或者线型&#xff0c;我们统称为样式&#xff0c;让绘制出的内容在这些样式中循环配置。这时就需要使用到本文所提到的技巧&#xff0c;即cycler. 1 进入教程 本文是自定义属性循环(cycler)设置的演示&#xff0c;用于控制多线…

格点数据可视化(美国站点的日降雨数据)

获取美国站点的日降雨量的格点数据&#xff0c;并且可视化 导入模块 from datetime import datetime, timedelta from urllib.request import urlopenimport cartopy.crs as ccrs import cartopy.feature as cfeature import matplotlib.colors as mcolors import matplotli…

【面试总结大纲】

面试 springSpring AOP的具体实现核心概念分别指的是什么?基于注解的切面实现主要包括以下几个步骤&#xff1a;两个切面&#xff0c;它们之间的顺序是怎么控制的 springmvc的工作流程设计模式原则Spring 框架中用到了哪些设计模式&#xff1f; spring Spring AOP的具体实现 …

Nginx之Openresty基本使用解读

目录 Openresty基本介绍 Openresty源码编译安装 Openresty基本使用 测试lua脚本 外部分文件导入 关闭缓存&#xff0c;开启热部署 用lua代码获取系统变量 Openresty基本介绍 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua…

【MySQL教程】| (1-1) 2023MySQL-8.1.0 安装教程

文章目录 一、安装包下载二、安装配置1、解压安装包2、编写MySQL配置文件3、初始化MySQL数据库3、安装mysql服务并启动4、MySQL服务5、连接MySQL6、修改密码 三、配置环境变量四、防止mysql自启动拖慢开机时间 近日有粉丝问到mysql在win11的安装中遇到一些问题&#xff0c;应粉…

[MAUI程序设计] 用Handler实现自定义跨平台控件

今天来谈一谈MAUI跨平台技术的核心概念——跨平台控件。 无论是MAUI,Xamarin.Forms还是其它的跨平台技术,他们是多个不同平台功能的抽象层,利用通用的方法实现所谓“一次开发,处处运行”。 跨平台框架需要考虑通用方法在各平台的兼容,但由于各原生平台(官方将原生称为本…