关于python中的实例方法、类方法以及静态方法的小研究

在上篇博客的在线编程中需要实例化对象,然后调用类中定义的方法,这其中遇到点小问题,就是当去掉方法的第一个参数self后,直接调用方法(不使用实例对象调用,直接Find(4,array)),然后报错:missing 1 required positional argument: 'self'

由于之前对这一块没有过深地研究,只知道self是默认的参数,传参是不用管它,之前最多用在__init__方法中,现在稍微研究一下,看看这里边有什么奥秘,上代码:

# # -*- coding:utf-8 -*-
class Test:
    def instance(self):
        return "这是实例方法"

    @classmethod
    def classM(cls):
        return "这是类方法"

    @staticmethod
    def static():
        return "这是一个和类无关的方法"

t=Test()  #实例化对象
print(t.instance())
print(t.classM())
print(t.static())





如上所示,在类Test中定义了三个方法,第一个为实例方法,参数为self;第二个为类方法,参数为cls;第三个为静态方法,没有参数,后两者都使用了装饰器,感兴趣的朋友可以搜一下这一块,之后有时间我也会探究一下。

之后分别用实例对象t调用这三个方法并输出:

没毛病,正常输出,接着注释掉上边的代码,改用类名直接调用:

print(Test.classM())
print(Test.static())
print(Test.instance())

报错了:

报的错和我之前遇到的一样,其实这一点和java中很类似,类名不能直接调用实例方法,因为当类初始化时还没有实例对象,大概就是这么个意思,总结一下:

实例方法

    定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

    调用:只能由实例对象调用。

类方法

    定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

    调用:实例对象和类对象都可以调用。

静态方法

    定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

    调用:实例对象和类对象都可以调用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章