简单总结:

与类和实例无绑定关系的function都属于函数(function);

与类和实例有绑定关系的function都属于方法(method)。

首先摒弃错误认知:并不是类中的调用都叫方法

函数(FunctionType)

函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。可以直接在模块中进行定义使用。 所有传递给函数的数据都是显式传递的。

方法(MethodType)

方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的,表示针对性的操作。

方法中的数据self和cls是隐式传递的,即方法的调用者;

方法可以操作类内部的数据

简单的说,函数在python中独立存在,可直接使用的,而方法是必须被别人调用才能实现的。

静态方法除外(与类和对象均无关,通过类名和对象名均可被调用,属函数)

在模块中实现的函数只要导入这个模块的这个函数既可以任意使用了,但是在类中声明的必须导入这个类之后然后再通过创建实例或者类名来调用。可以说直接在模块中声明的是更普遍广泛性的函数,而在类中声明的方法一般是专属于一类事物特有的

from types importMethodType,FunctionTypeclassFoo(object):def __init__(self):

self.name="haiyan"

deffunc(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 importFunctionType,MethodTypeprint(isinstance(obj.func,MethodType)) --->#True

print(isinstance(Foo.func,FunctionType)) --->#True

表面区别:

区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中。

区别二定义的方式:

1.函数定义的方式 def关键字 然后接函数名 再是括号 括号里面写形参也可以省略不写形参

deffunctionName():"""这里是函数的注释"""

print("这一块写函数的内容"

2.方法定义的方式 首先方法是定义在类中的其他他大体和函数定义差不多,这里需要注意的一点就是方法必须带一个默认参数(相当于this),静态方法除外

classclassName(super):defmethodName(self):"""这里是方法的注释

self相当于this;"""

print("这里是方法的内容")

区别三调用的方式:

1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)

deffunctionName():print("这是一个函数")#调用

functionName()

2.方法的调用:方法是通过对象点方法调用的(这里是指对象方法)

classclassName:defmethod(self):print("这是一个方法")#调用---------------------#实例化对象

c=className()

c.method()

python类的实例方法、静态方法和类方法区别及其应用场景

一、先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。

ps.python中self,cls的区别

普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。

如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。

而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

#coding:utf-8

classFoo(object):"""类三种方法语法形式"""

definstance_method(self):print("是类{}的实例方法,只能被实例对象调用".format(Foo))

@staticmethoddefstatic_method():print("是静态方法")

@classmethoddefclass_method(cls):print("是类方法")

foo=Foo()

foo.instance_method()

foo.static_method()

foo.class_method()print('----------------')

Foo.static_method()

Foo.class_method()

运行结果如下

是类的实例方法,只能被实例对象调用

是静态方法

是类方法----------------是静态方法

是类方法

说明:

实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。

实例方法,第一个参数必须要默认传实例对象,一般习惯用self。

静态方法,参数没有要求。

类方法,第一个参数必须要默认传类,一般习惯用cls。

python中函数和类的区别_Python中函数和方法的区别相关推荐

  1. Python面向对象之六:类的约束和super函数

    Python面向对象之六:类的约束和super函数 一.类的约束 类的约束就是对父类对子类的属性和方法进行一定的约束控制. 1.对子类属性的约束(slots) class A:__slots__ = ...

  2. Unity+C#开发笔记(七)| unity中继承MonoBehaviour类的脚本里的函数怎么调用 | ╭(●`∀´●)╯╰(●’◡’●)╮

    继上文,有个蠢货单例模式只是用来引用,突然遇到了一个继承了MonoBehaviour的类,然后unity跟你讲:不!你不可以在我这里这么用! 啊这--吓得我当场百度... ************** ...

  3. python中的方法和函数的区别_python中函数与方法的区别?

    Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...

  4. python中的方法和函数的区别_Python中函数和方法的区别

    在Python中函数和方法是有区别的. 区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中. 区别二定义的方式: 1.函数定义的方式 def关键字  然后接函数名 再是 ...

  5. python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承

    1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...

  6. python元类的概念_Python中的元类编程 | 学步园

    过去有这样的概念,一直没有深究它的意义.今天同事问到,刚好也好好了解下. #===============================================Python中的元类编程=== ...

  7. 在python中、对于函数定义代码的理解_python中如何理解装饰器代码?

    长文预警,[最浅显易懂的装饰器讲解] 能不能专业地复制题目?配上代码,问题分段. 我来给提主配上问题的代码. 正式回答: 1:如何理解return一个函数,它与return一个值得用法区别在哪? 敲黑 ...

  8. python属性和方法的区别_Python中几种属性访问的区别与用法详解

    起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...

  9. python里help和dir的区别_Python中dir()与help()的使用

    python内置了很多内置函数.类方法属性及各种模块.当我们想要当我们想要了解某种类型有哪些属性方法以及每种方法该怎么使用时,我们可以使用dir()函数和help()函数在python ide交互式模 ...

最新文章

  1. LeetCode简单题之最小绝对差
  2. 它,是一部全网最全的JDK发展历史轨迹图...
  3. SQL注入——报错注入
  4. Spring 中的隔离级别
  5. 腾讯再次开源三项技术,提升企业运维效率
  6. Providers in SAP Spartacus
  7. java用XSSFWorkbook实现读写Excel
  8. 字符串匹配算法总结(转)
  9. Linux 用户及权限详解
  10. 软考高级,信息系统项目管理师(高项)经验分享
  11. mysql数据库分页查询,limit语句用法
  12. Android 热补丁动态修复
  13. Redis集群-哨兵
  14. win7网络感叹号dns服务器未响应,笔记本win7系统下无线网络显示已连接却不能上网有感叹号如何解决...
  15. 通过three.js实现3d模型展示
  16. 开发一个短信推送工具需要怎么做
  17. 计算机考试网站配置参数错误,电脑一直显示数据配置错误怎么办
  18. R语言_电信客户流失数据分析
  19. RD算法及其距离徙动校正(原理及matlab仿真)
  20. jq html 回车提交表单,jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)

热门文章

  1. 如何在多版本anaconda python环境下转换spyder?
  2. 微信“看一看“个性化推荐:排序篇
  3. Java线程状态分析
  4. 如何计算Java对象所占内存的大小
  5. Java项目编译时经常会出现不编译,或者报一些假性错误
  6. python json模块 超级详解
  7. 话里话外:成功实施ERP要做到的几个关注点
  8. blog被封了文章全被删除了,郁闷
  9. Windows 下的 PHP 编译
  10. SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN