基于Python 函数和方法的区别说明
作者:RuigeO 发布时间:2023-10-03 02:04:01
简单总结:
1、与类和实例无绑定关系的function都属于函数(function);
2、与类和实例有绑定关系的function都属于方法(method)。
首先摒弃错误认知:并不是类中的调用都叫方法
函数(FunctionType)
函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。可以直接在模块中进行定义使用。 所有传递给函数的数据都是显式传递的。
方法(MethodType)
方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的,表示针对性的操作。
方法中的数据self和cls是隐式传递的,即方法的调用者;
方法可以操作类内部的数据
简单的说,函数在python中独立存在,可直接使用的,而方法是必须被别人调用才能实现的。
静态方法除外(与类和对象均无关,通过类名和对象名均可被调用,属函数)
在模块中实现的函数只要导入这个模块的这个函数既可以任意使用了,但是在类中声明的必须导入这个类之后然后再通过创建实例或者类名来调用。可以说直接在模块中声明的是更普遍广泛性的函数,而在类中声明的方法一般是专属于一类事物特有的
from types import MethodType,FunctionType
class Foo(object):
def __init__(self):
self.name="haiyan"
def func(self):
print(self.name)
obj = Foo()
print(isinstance(obj.func,FunctionType)) #False
print(isinstance(obj.func,MethodType)) #True #说明这是一个方法
print(isinstance(Foo.func,FunctionType)) #True #说明这是一个函数。
print(isinstance(Foo.func,MethodType)) #False
是的!例子中很明确,类对象调用func是方法,类调用func是函数,并且是自己传递参数123!
注意,这只是在 python3 中才有的区分,python2 中全部称为方法。
最大的区别是参数的传递参数,方法是自动传参self,函数是主动传参
那么以后我们就可以直接看参数是如何传递的来判断,
如果还不确定可以打印类型看看
from types import FunctionType,MethodType
print(isinstance(obj.func,MethodType)) ---># True
print(isinstance(Foo.func,FunctionType)) ---># True
表面区别:
区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中。
区别二定义的方式:
1.函数定义的方式 def关键字 然后接函数名 再是括号 括号里面写形参也可以省略不写形参
def functionName():
"""这里是函数的注释"""
print("这一块写函数的内容"
2.方法定义的方式 首先方法是定义在类中的其他他大体和函数定义差不多,这里需要注意的一点就是方法必须带一个默认参数(相当于this),静态方法除外
class className(super):
def methodName(self):
"""这里是方法的注释
self相当于this;
"""
print("这里是方法的内容")
区别三调用的方式:
1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)
def functionName():
print("这是一个函数")
#调用
functionName()
2.方法的调用:方法是通过对象点方法调用的(这里是指对象方法)
class className:
def method(self):
print("这是一个方法")
#调用---------------------
#实例化对象
c=className()
c.method()
python类的实例方法、静态方法和类方法区别及其应用场景
一、先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。
ps.python中self,cls的区别
普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。
如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
# coding:utf-8
class Foo(object):
"""类三种方法语法形式"""
def instance_method(self):
print("是类{}的实例方法,只能被实例对象调用".format(Foo))
@staticmethod
def static_method():
print("是静态方法")
@classmethod
def class_method(cls):
print("是类方法")
foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()
运行结果如下
是类<class '__main__.Foo'>的实例方法,只能被实例对象调用
是静态方法
是类方法
----------------
是静态方法
是类方法
说明:
实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象,一般习惯用self。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类,一般习惯用cls。
补充:python方法和函数集锦
方法的使用: 变量.方法名(参数)
函数的使用: 函数名(参数)
字符串
1、删除空白
rstrip(): 返回去掉尾部的空格后的字符串。(不改变原字符串)
lstrip(): 去掉首部空格
strip(): 去掉两端的空格
2、修改字符串大小写
title(): 以首字母大写的方式显示每个单词
upper(): 将字符串转换为全部大写
lower(): 将字符串转换为全部小写
name = "ada lovelace"
print(name.title())
# => Ada Lovelace
print(name.upper())
# => ADA LOVELACE
print(name.lower())
# => ada lovelace
数字、浮点数
1、类型转换
str():将数字类型用作字符串
列表
1、添加元素
append(): 在列表末尾添加元素 insert(index, value): 在列表索引位置添加新元素
2、删除元素
del语句
pop(): 删除列表末尾元素
pop(index): 删除指定索引位置的元素
remove(value): 删除指定值的元素(第一次出现值)
3、排序
列举的方法只适用于所有元素都是小写字母的列表,如果是大写字母和小写字母混合的情况,因为解读大写字母的方式有多种,所以需要进一步指定准确的排列方法才行。
(1) 永久性修改
sort(): 按列表元素首字母排序。(直接修改原列表)
sort(reverse = True): 按列表元素首字母倒序排序。
使用:arr.sort()
(2) 临时排序(返回排序后的列表,不改变原列表)
sorted():按列表元素首字母排序。 sorted(arr, reverse = True): 按列表元素首字母倒序排序使用:sorted(arr)
4、倒着打印列表
reverse()
反转列表元素的顺序,但并不进行排序处理。永久性修改列表元素的排列顺序。但是可再次使用reverse()方法反转恢复
5、确定列表的长度
len(arr)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/RuigeO/article/details/82871472


猜你喜欢
- 本文实例解析Python SqlAlchemy的使用方法,分享给大家供大家参考,具体内容如下1.初始化连接from sqlalchemy i
- 针对16G内存的配置tmp_table_size = 64M先说下tmp_table_size吧:它规定了内部内存临时表的最大值,每个线程都
- 最近有点审美疲劳,以往看起来觉得漂亮的界面现在觉得很一般,以前觉得看来还行的界面现在觉得很丑了。想来是时候休息一下了。唯美觉得上次做的OA登
- flash_url : "../swfupload/swfupload_f8.swf" upload_url: &quo
- MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用。如果在项目中要连接 MySQL 数据库,则建议新建一个权
- 前言最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写业务: sql语句统计出入库数据
- 一封电子邮件的旅程是:MUA:Mail User Agent——邮件用户代理。(即类似Outlook
- 我在使用conda安装虚拟环境的过程中,下载一些包,比如torch等,发现在虚拟环境中有一份以外,pkgs文件夹下同样也会出现一份,大小一样
- php var_dump 函数作用是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.来看看var_du
- Base64编码和解码Base64 不是加密算法,只是一种编码方式,数据从一种形式转换为另一种形式进行传输/存储。Base64 就是一种基于
- 面试某某公司BI岗位的时候,面试题中的一道sql题,咋看一下很简单,写的时候发现自己缺乏总结,没有很快的写出来。题目如下:求每个品牌的促销天
- 一、引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存
- 字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样
- 本文实例讲述了thinkphp的URL路由规则与配置方法。分享给大家供大家参考。具体分析如下:一、URL规则1、默认是区分大小写的2、如果我
- 当使用PHP在MySQL中编写查询时,它的适用性将基于MySQL本身进行检查。所以使用MySQL提供的默认日期和时间格式,即'YYY
- 钉钉设置机器人首先在钉钉设置钉钉机器人群设置—> 智能群助手—>添加机器人—>自定义添加完成,得到一个Webhook AP
- 一、XML产生的背景 XML同HTML一样,都来自Standard Generalized Markup Language, 即标准通用标记
- 今天早上起来写爬虫,基本框架已经搭好,添加多线程爬取功能时,发现出错:比如在下载文件的url列表中加入200个url,开启50个线程。我的爬
- 概述业务数据的上报主要分为:各个路由的PV上报;用户的点击行为上报;用户操作结果(分享是否成功)的数据上报等;通用和必须上报的数据,均在上报
- 平常的开发过程中不免遇到需要把model转成字典的需求,尤其是现在流行前后端分离架构,Json格式几乎成了前后端之间数据交换的标准,这种mo