为了账号安全,请及时绑定邮箱和手机立即绑定

求助,Python里method和function的区别

求助,Python里method和function的区别

翻阅古今 2021-02-18 11:11:09
Python里method和function的区别
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

呃,确实误导了。
function

method
是两个不同的语境下的概念。function
是从代码机制角度来说的,表示函数这个机制,它是与“语句”相对应的概念。而
method
是从面向对象机制角度来说的,它表示类或对象的一个方法(也称操作),它是与“属性”等相对应的概念。
通常来说,function

method
是可以互换的。严格地说,虽然方法是由函数来实现的,但所有的函数并不一定是方法,例如:构造函数、析构函数、属性访问器等等都是由函数实现的,但它们都不是方法。有些私有函数的设计意图也是从面向过程来考虑的,并不是要提供一个
method。

查看完整回答
反对 回复 2021-03-18
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

在Python中,对这两个东西有明确的规定:
函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.

方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
从定义的角度上看,我们知道函数(function)就相当于一个数学公式,它理论上不与其它东西关系,它只需要相关的参数就可以。所以普通的在module中定义的称谓函数是很有道理的。
那么方法的意思就很明确了,它是与某个对象相互关联的,也就是说它的实现与某个对象有关联关系。这就是方法。虽然它的定义方式和函数是一样的。也就是说,在Class定义的函数就是方法。
从上面的角度看似乎很有道理。

>>> def fun():
pass
>>> type(fun)
<class 'function'> #没有问题

>>> class Cla():
def fun():
pass
@classmethod
def fun1(cls):
pass
@staticmethod
def fun2():
pass
>>> i=Cla()
>>> Cla.fun.__class__
<class 'function'> #为什么还是函数
>>> i.fun.__class__ #这个还像话
<class 'method'>
>>> type(Cla.fun1)
<class 'method'>   #这里又是方法
>>> type(i.fun1)
<class 'method'>    #这里仍然是方法
>>> type(Cla.fun2)
<class 'function'>   #这里却是函数
>>> type(i.fun2)
<class 'function'>    #这里却是函数
事实上,上面的结果是可以解释的:
1,普通方法(老版中直接就是"instancemethod")在module中与在Class中定义的普通函数,从其本身而言是没有什么区别的,他们都是对象函数属性。 之所以会被说在Class中的定义的函数被称为方法,是因为它本来就是面向将来的实例对象的,其实他们就是实例方法,这些方法是与实例相联系的(从实例出发访问该函数会自动赋值)。所以你从Class访问仍然是一个函数
2,类方法("classmethod"),因为类同样是对象,所以如果函数与类进行联系了话(与实例方法一样的模式)那么就能够这么说了!
3,静态方法,虽然定义在内部,并且也较方法,但是却不与任何对象联系,与从类访问方法是一样的,他们仍然是函数。
这样看来上面的定义可以改改了:
函数的定义自然不变。
方法的定义可以是这样的,与某个对象进行绑定使用的函数。注意哦。绑定不是指" . "这个符号,这个符号说实在的只有域名的作用。绑定在这里是指,会默认赋值该绑定的对象。



查看完整回答
反对 回复 2021-03-18
  • 2 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信