简单总结:不绑定类和实例的函数就是函数;绑定到类和实例的函数是方法。首先要破除误解:并不是所有类中的调用都称为方法函数(FunctionType)。函数封装了一些独立的函数,可以直接调用,可以传入一些数据(参数)进行处理,然后返回一些数据(返回值),也可以不返回值。可以直接在模块中定义和使用。传递给函数的所有数据都是显式传递的。方法(MethodType)方法类似于函数,也封装了独立的函数,但方法只能被类或对象调用,表示有针对性的操作。隐式传递方法中的数据self和cls,即方法的调用者;该方法可以操作类内部的数据。简单的说,函数在python中是独立存在的,可以直接使用,而方法必须要别人调用。实现了。除了静态方法(与类和对象无关,可以通过类名和对象名调用,是函数)外,模块中实现的函数可以任意使用,只要导入本模块的函数即可,但是那些在类中声明的必须在导入该类后,通过创建实例或类名来调用它。可以说直接在模块中声明的函数是比较通用的函数,而在类中声明的方法一般是特定于一类的东西fromtypesimportMethodType,FunctionTypeclassFoo(object):def__init__(self):self.name="haiyan"deffunc(self):print(self.name)obj=Foo()print(isinstance(obj.func,FunctionType))#Falseprint(isinstance(obj.func,MethodType))#True#Description这是一个方法print(isinstance(Foo.func,FunctionType))#True#表示这是一个函数。打印(isinstance(Foo.func,MethodType))#FalseYes!例子中很明显调用func的类对象是一个方法,调用func的类是一个函数,参数123是自己传过来的!注意这只是python3中的区别,在python2中都称为方法。最大的区别是参数的传递。方法是自动给自己传递参数,功能是主动传递参数。然后我们就可以直接看参数是怎么传递的,以后就可以判断了。如果不确定,可以打印类型看fromtypesimportFunctionType,MethodTypeprint(isinstance(obj.func,MethodType))--->#Trueprint(isinstance(Foo.func,FunctionType))--->#True表面上的区别:区别一:函数直接写在文件里,而不是类里,方法只能写在类里。不同的是两种定义方式:1.函数定义的方式def关键字后跟函数名然后括号写形参也可以省略不写形参deffunctionName():"""这里是函数的注释"""print("这块写的是函数的内容"2.方法定义的方式首先,方法是在类中定义的,和函数定义大致相同。这里需要注意的一点是方法必须有一个默认参数(相当于this),除了静态方法classclassName(super):defmethodName(self):"""这里是方法的注解self相当于this;"""print("这里是方法的内容")区分三种调用方式:1.函数调用:函数的调用就是直接写函数名(函数参数1,函数参数2,..)deffunctionName():print("Thisisafunction")#callfunctionName()2。方法调用:通过对象点方法调用方法(这里指的是对象方法)'''学习中遇到问题没人回答?小编创建了一个Python学习交流群:531509025寻找志同道合的小伙伴互相帮助,群里还有不错的视频学习教程和PDF电子书!'''classclassName:defmethod(self):print("Thisisamethod")#call--------------------#Instantiatedobjectc=className()c.method()实例方法的区别,staticpython类的方法和类方法及其应用场景1.首先看语法。python类语法方法分为三种,实例方法、静态方法、类方法。ps.python中self和cls的区别就是普通的实例方法。第一个参数需要是self,代表一个特定的实例本身。如果使用了staticmethod,那么可以忽略Thisself,把这个方法当作一个普通的函数来使用。对于classmethod,它的第一个参数不是self,而是代表类本身的cls。classFoo(object):"""类的三个方法的语法形式"""definstance_method(self):print("是类{}的一个实例方法,只能被实例对象调用".format(Foo))@staticmethoddefstatic_method():print("是一个静态方法")@classmethoddefclass_method(cls):print("是一个类方法")foo=Foo()foo.instance_method()foo.static_method()foo.class_method()print('----------------')Foo.static_method()Foo.class_method()运行结果如下:是一个实例
