函数(FunctionType)
- 函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。
- 可以直接在模块中进行定义使用。
- 所有传递给函数的数据都是显式传递的。
方法(MethodType)
- 方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的,表示针对性的操作。
- 方法中的数据self和cls是隐式传递的,即方法的调用者。
- 方法可以操作类内部的数据。
python 类语法中有三种方法,实例方法,静态方法,类方法。
- 实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
- 实例方法,第一个参数必须要默认传实例对象,一般习惯用 self。
- 静态方法,参数没有要求。
- 类方法,第一个参数必须要默认传类,一般习惯用 cls。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# coding:utf-8
class Foo(object):
"""类三种方法语法形式"""
def instance_method(self):
print("是类{}的实例方法,只能被实例对象调用".format(Foo))
@staticmethod
def static_method():
print("是静态方法")
@classmethod
def class_method(cls):
print("是类方法")
if __name__ == "__main__":
foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print("===========================")
Foo.static_method()
Foo.class_method()
运行结果:
1
2
3
4
5
6
是类<class '__main__.Foo'>的实例方法,只能被实例对象调用
是静态方法
是类方法
===========================
是静态方法
是类方法
区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from types import MethodType, FunctionType
class Foo(object):
def __init__(self):
self.name = "haiyan"
def func(self):
print(self.name)
if __name__ == '__main__':
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
运行结果:
1
2
3
4
False
True
True
False
以上例子中,类对象调用 func 是方法,类调用 func 是函数。这只是在 python3 中才有的区分,python2 中全部称为方法。
一、传参
最大的区别是参数的传递参数,方法是自动传参 self,函数是主动传参。
1
2
3
4
5
6
7
8
# 函数
def func():
print("函数")
class Test:
def method(self):
print("方法")
二、位置
函数是直接写文件中而不是 class 中,方法是只能写在 class 中。
三、定义
函数定义的方式。def 关键字,然后接函数名,再是括号。括号里面写形参也可以省略不写形参:
1
2
3
def functionName():
"""这里是函数的注释"""
print("这一块写函数的内容")
方法定义的方式。首先方法是定义在类中的,其他大体上和函数定义差不多,这里需要注意的一点就是方法必须带一个默认参数(相当于 this),静态方法除外。
1
2
3
4
5
6
7
class className(super):
def methodName(self):
"""这里是方法的注释
self 相当于this
"""
print("这里是方法的内容")
四、调用
函数的调用:函数的调用是直接写函数名(函数参数1,函数参数2,……)
1
2
3
4
5
def functionName():
print("这是一个函数")
#调用
functionName()
方法的调用:方法是通过对象点方法调用的(这里是指对象方法)
1
2
3
4
5
6
7
8
9
class className:
def method(self):
print("这是一个方法")
#调用---------------------
#实例化对象
c = className()
c.method()