Python中函数和⽅法的区别
简单总结:
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():
writeline和write的区别pythonprint("这是⼀个函数")
#调⽤
functionName()
2.⽅法的调⽤:⽅法是通过对象点⽅法调⽤的(这⾥是指对象⽅法)
class className:
def method(self):
print("这是⼀个⽅法")
#调⽤---------------------
#实例化对象
c=className()
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。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。