python 进阶(5) -- 函数和方法的区分


[HTML_REMOVED][HTML_REMOVED]这是最好的时代,也是最坏的时代[HTML_REMOVED][HTML_REMOVED]


参考抄袭

http://blog.csdn.net/lastinglate/article/details/7295248 http://blog.csdn.net/amoscn/article/details/77074403


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)

方法是定义在 class 中的函数,跟实例对象有关

但试了一些例子,发现还是有一些区别的


实例

def fun():
    pass
print(fun)

# Output: <function fun at 0x000001F515002EA0>

可以看出,这是单独定义的一个函数,可以理解为,在 class 外部定义的可执行函数都是函数

再看一个 class 内部的:

class test(object):

    def fun1(self):
        return 'normal'

    @staticmethod
    def fun2():
        return 'staticmethod'

    @classmethod
    def fun3(cls):
        return 'classmethod'

t = test()
print(t.fun1)
print(t.fun2)
print(t.fun3)

# Output:
# <bound method test.fun1 of <__main__.test object at 0x0000024A270F2898>>
# <function test.fun2 at 0x0000024A270D47B8>
# <bound method test.fun3 of <class '__main__.test'>> 

可以看出: - 在 class 内定义的普通方法,如 fun1,因为它是要面向将来实例化对象的,其实它就是一个实例方法。它属于 method,是一个方法。 - 在 class 内定义的静态方法,如 fun2,它与任何对象都没有联系,等同于是在 class 外定义的 function,它属于函数。 - 在 class 内定义的类方法,如 fun3,它第一个参数必须是 cls,它与 class 本身是绑定关系,它属于方法。


总结

  1. 与类和实例无绑定关系的function都属于函数(function)
  2. 与类和实例有绑定关系的function都属于方法(method)