Python-实例方法静态方法类方法对比总结

相关概念

1:实例方法

除了静态方法与类方法外,类的其他方法都属于实例方法

实例方法隐含的参数为类实例self

实例方法需要将类实例化后才可以调用,如果使用类直接调用实例方法,需要显示地将实例对象作为参数传入

创建一个类,包含普通方法,静态方法,类方法

class A():
    #类属性
    sentence = 'this is a learning testing'
    
    #普通方法(实例方法)
    def normalMethod(self):
        print(self.sentence)
        
    # 类方法
    @classmethod
    def classMethod(cls,sentence):
        print(cls.sentence)
        
    # 静态方法
    @staticmethod
    def staticMethod(sentence):
        print(sentence)

1:实例方法

使用实例调用实例方法:
(1)不改变原始类属性
(2)改变原始类属性

-------1:不改变原始类属性
在这里插入图片描述
-------2:改变原始类属性

(2)输出结果:
在这里插入图片描述
总结:输出结果随着实例属性改变而改变

2:静态方法

静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。可以理解为将静态方法存在此类的名称空间中。事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数。
关于静态方法只需要记住两方面:可以被实例对象和类访问;静态方法直接输出传入方法的值。

------1:实例对象访问静态方法
输出结果:
在这里插入图片描述
------2:用类直接访问静态方法

输出结果:
在这里插入图片描述
总结:静态方法直接输出传入方法的值

备注:

Python使用静态方法类似函数工具使用,一般尽量少用静态方法。

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:

1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;

2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;

3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。

3:类方法

类方法可以通过类直接调用,或通过实例直接调用。但无论哪种调用方式,方法隐含的参数为类本身cls。

类方法可以实例化对象和类访问,不随实例属性的变化而变化。

------1:实例对象访问类方法

输出结果:
在这里插入图片描述

------2:接用类访问类方法

在这里插入图片描述
总结
1.都是类属性的值,不随实例属性的变化而变化
2. 类方法可以被实例对象和类访问
3. 类成员方法则更接近类似Java面向对象概念中的静态方法

实例方法和类方法区别:

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

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

归纳成一张表:

实例方法(普通方法)类方法静态方法
实例调用a=A()a.normalMethod(x)a.classMethod(x)a.staticMethod(x)
类调用A不能调用A.classMethod(x)A.staticMethod(x)

所以实例方法的权限是最高的,只有实例对象可以访问。

而静态方法,实例对象和类方法都可以访问。

附:
(1)Python:类的继承,调用父类的属性和方法基础详解
(2)Python类的实例化,封装,继承,私有变量和私有方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值