美文网首页
python中类方法、类实例方法、静态方法的使用与区别

python中类方法、类实例方法、静态方法的使用与区别

作者: 大猪厂 | 来源:发表于2018-04-10 20:42 被阅读0次
    # coding = utf-8
    class A(object):
        def __init__(self, x=0):
            self.x = x
    
        # 类实例方法  # 最常见的实例方法
        def foo(self, y=0):
            print(self.x, y)
    
        # 类方法  # cls即为类自身
        @classmethod
        def class_foo(cls, x=1, y=1):
            return cls(x)  # 因为类方法可以传参一个cls参数,所以可以调用类的相关信息,而静态方法是一个独立的函数,也是可以调用的,这里为了简单,没有调用静态方法。
    
        # 静态方法  # 不能传递和类或实例相关的参数,如cls或self,但可以传递其他参数
        @staticmethod
        def static_foo(x=2):
            return A(x)
    
    

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

    定义类方法主要是要加一个装饰器,@classmethod

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

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

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

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

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

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

    总结

    普通方法可以通过self访问实例属性;
    类方法,可以通过cls访问类属性;
    静态方法,不可以访问,通过传值的方式;

    相关文章

      网友评论

          本文标题:python中类方法、类实例方法、静态方法的使用与区别

          本文链接:https://www.haomeiwen.com/subject/nrznhftx.html