当前位置: 移动技术网 > IT编程>脚本编程>Python > Pyhton的实例方法、类方法、静态方法三者的区别

Pyhton的实例方法、类方法、静态方法三者的区别

2017年12月22日  | 移动技术网IT编程  | 我要评论

新疆维吾尔歌曲,dj火电影,臧志中

实例方法和类方法的区别

有区别的,最主要的区别在于,定义类方法主要是要加一个装饰器,@classmethod

而实例方法没有这个装饰器。这是区别实例方法和类方法的最主要的区别。

在调用上的区别在于,实例方法要先实例化一个对象再调用这个实例化方法,而类方法不需要有类的实例,直接类名.方法名就可以调用。

实例方法至少有一个参数,通常用self,这个参数里面是这个实例本身。类方法至少有一个参数,通常用cls,这个参数里面是这个类本身。

实例方法由于有实例,所以实例的属性对其实可见的,但类方法显然没有属性。

本质上来讲,类方法和实例方法没有本质区别,只不过在调用的时候,实例方法把这个实例本身当做参数传过去了。

以下是示例代码,感受一下。

classmyclass:

@classmethod

defclassMethod(cls):

print('classmethod')

print('parameter:%s'%cls)

pass

definstanceMethod(self):

print('instancemethod')

print('parameter:%s'%self)

pass

m=myclass()

m.instanceMethod()#实例来调用实例方法

myclass.classMethod()#类名.方法名调用类方法

myclass.instanceMethod(m)#类名.方法名,并将实例作为参数传入,和实例调用实例方法一样

类方法和静态方法的区别

面相对象程序设计中,类方法和静态方法是经常用到的两个术语。

逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。

在C++中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆。

而在Python中,方法分为三类实例方法、类方法、静态方法。代码如下:

class Test(object):

def InstanceFun(self):

print("InstanceFun");

print(self);

@classmethod

def ClassFun(cls):

print("ClassFun");

print(cls);

@staticmethod

def StaticFun():

print("StaticFun");

t = Test();

t.InstanceFun();      # 输出InstanceFun,打印对象内存地址“<__main__.Test object at 0x0293DCF0>”

Test.ClassFun(); # 输出ClassFun,打印类位置

Test.StaticFun(); # 输出StaticFun

t.StaticFun(); # 输出StaticFun

t.ClassFun(); # 输出ClassFun,打印类位置

Test.InstanceFun(); # 错误,TypeError: unbound method

instanceFun() must be called with Test instance as first argument

Test.InstanceFun(t); # 输出InstanceFun,打印对象内存地址“<__main__.Test object at 0x0293DCF0>”

t.ClassFun(Test); # 错误 classFun() takes exactly 1 argument (2 given)

可以看到,在PYTHON中,两种方法的主要区别在于参数。实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls。

静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。

所以逻辑上类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用。主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数,而类方法悄悄传递的是cls引用作为参数。

Python实现了一定的灵活性使得类方法和静态方法,都能够被实例和类二者调用

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网