0%

Python_方法的种类

Python中方法

一共存在三种方法,分别是实例方法,类方法(classmethod),静态方法(staticmethod);

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 单独的函数定义,不需要绑定实例
def foo(x):
print("executing foo(%s)"%(x))
foo("function")

class A(object):
#实例方法,需要绑定实例self
def foo(self , x):
print("executing foo(%s,%s)"%(self,x))
#类方法需要绑定类,cls
@classmethod
def class_foo(cls,x):
print("executing foo(%s,%s)"%(cls,x))
#静态方法不需要任何绑定
@staticmethod
def static_foo(x):
print("executing foo(%s)"%(x))

代码运行与结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = A()
a.foo("实例调用实例方法")
a.class_foo("实例调用类方法")
a.static_foo("实例调用静态方法")

#executing foo(<__main__.A object at 0x0000028BA3754780>,实例调用实例方法):实例方法传入的是实例
#executing foo(<class '__main__.A'>,实例调用类方法) :类方法即使是实例调用传入的仍然是类
#executing foo(实例调用静态方法)

A.class_foo("类调用类方法")
A.static_foo("类调用静态方法")
# executing foo(<class '__main__.A'>,类调用类方法)
# executing foo(类调用静态方法)


这里先理解下函数参数里面的self和cls.这个self和cls是对类或者实例的绑定,对于一般的函数来说我们可以这么调用foo(x),这个函数就是最常用的,它的工作跟任何东西(类,实例)无关.对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是foo(self, x),为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实例自己传给函数,调用的时候是这样的a.foo(x)(其实是foo(a, x)).类方法一样,只不过它传递的是类而不是实例,A.class_foo(x).注意这里的self和cls可以替换别的参数,但是python的约定是这俩,还是不要改的好.

对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)或者A.static_foo(x)来调用.

简单总结

Python中存在方法与函数:方法就是定义在class类定义的函数,其往往需要与实例或者类进行绑定,函数就是独立于实例与类存在的方法,不需要绑定任何事物;我们可以简单的将Python中的方法定义为位于类内部定义的函数即可;

Python中的方法往往需要进行绑定,这种绑定能够起到定义不同的作用域的作用,知道存在三种方法及其写法及其调用方式即可;