python3-面向对象之实例方法、类方法和静态方法

501 阅读2分钟

来自python3学习笔记,有不正确的地方大家多多指教

一、实例方法

通常情况下,在类中定义的方法都属于实例方法,且类的构造函数也就是__int__()也属于实例方法。

class Language:
    def __init__(self):
        self.name = "Python"
        self.add = "http//www.baidu.com"

    def test(self):
        print("这是实例方法")

实例方法中最大的特点就是最少需要包含一个self参数,实例方法可以使用类的实例对象调用或者使用类名调用。

1.类的实例对象调用

class Language:
    def test(self):
        print("这是实例方法")

if __name__ == '__main__':
    l = Language()
    l.test()

--输出:
这是实例方法

2.类名调用

如果通过类名直接调用实例方法,如下所示:会出现错误

class Language:
    def test(self):
        print("这是实例方法")

if __name__ == '__main__':
    Language.test()

输出:

image.png

在调用的时候缺少self参数,在调用的时候需要传入参数

class Language:
    def test(self):
        print("这是实例方法")

if __name__ == '__main__':
    l = Language()
    Language.test(l)

--输出:
这是实例方法

或者使用下面的方法:

class Language:
    def test(self):
        print(self, "这是实例方法")

if __name__ == '__main__':
    Language.test("蜗牛")

--输出:
蜗牛 这是实例方法

二、类方法

类方法与实例方法方法相似,最少需要包含一个参数cls,与实例方法不同的是,类方法前面需要加上@classmethod,如果没有加上@classmethod,则会默认为实例方法,而不是类方法。

类方法的调用

class Language:
    @classmethod
    def test(cls):
        print("这是类方法")

if __name__ == '__main__':
    Language.test()

class Language:
    @classmethod
    def test(cls):
        print("这是类方法")

if __name__ == '__main__':
    l = Language()
    l.test()

三、静态方法

静态方法与函数的差别就是:静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。

静态方法中没有固定的参数self或cls,调用方法有两种:

  • 类名.方法名
  • 实例化对象

1.类名.方法名调用

class Language:
    @staticmethod
    def test(name, add):
        print("这是静态方法:{0},{1}".format(name, add))

if __name__ == '__main__':
    Language.test("Python", "http//baidu.com")

--输出:
这是静态方法:Python,http//baidu.com

2.实例化对象调用

class Language:
    @staticmethod
    def test(name, add):
        print("这是静态方法:{0},{1}".format(name, add))

if __name__ == '__main__':
    l = Language()
    l.test("Python", "http//baidu.com")

--输出:
这是静态方法:Python,http//baidu.com
class Language:
    name = "Python"
    add = "http//baidu.com"

    @staticmethod
    def test(name, add):
        print("这是静态方法:{0},{1}".format(name, add))

if __name__ == '__main__':
    l = Language()
    l.test(l.name, l.add)

--输出:
这是静态方法:Python,http//baidu.com