Python 中的实例方法、类方法、静态方法的区别

1、关于参数的区别

  • 实例方法:定义实例方法是最少有一个形参 —> 实例对象,通常用 self

  • 类方法:定义类方法的时候最少有一个形参 —> 类对象,通常用 cls

  • 静态方法:定义静态方法的时候可以不定义形参

2、关于方法定义时候添加装饰器的区别

  • 实例方法:不需要添加装饰器

  • 类方法:需要添加装饰器 ----> @classmethod

  • 静态方法:需要添加装饰器 —> @staticmethod

3、调用:

  1. 实例方法可以通过对象直接调用

  2. 但是用类名调用的时候,需要创建一个对象,并且在传递参数的时候要将对象传递进去

  3. 类方法可以通过类名直接调用,也可以通过对象来调用

  4. 静态方法可以通过类名直接调用,也可以通过对象来调用

4、补充

  1. 静态方法不可以继承

  2. 类方法不能访问实例变量,只能访问类变量

#Python学习交流QQ群:778463939
class Dog():

    age = 3     # 类变量
    def __init__(self):
        self.name = "XiaoBai"   # 实例变量

    def run(self):      # 实例方法
        print("{} years old's {} is running!".format(self.age,self.name))

    @classmethod
    def eat(cls):
        # print(cls.name)       # 类方法,不能访问实例变量(属性)
        print("XiaoHei is {} years old".format(cls.age))    # 类方法只能访问类变量

    @staticmethod
    def sleep(name):
        # 静态方法与类无关,只能类中的一个功能而已
        # 静态方法不能访问类变量和实例变量
        print("{} is sleeping".format(name))

d = Dog()
d.run()     # 通过实例化对象调用实例方法
Dog.run(d)  # 通过类名称调用实例方法,需要在方法中传入实例对象
d.eat()     # 通过实例化对象调用类方法
Dog.eat()   # 通过类名称调用类方法
d.sleep("XiaoLan")   # 通过实例化对象调用静态方法
Dog.sleep("XiaoLan") # 通过类名称调用静态方法
posted @ 2022-10-07 20:31  I'm_江河湖海  阅读(26)  评论(0)    收藏  举报