名称 定义 调用 关键字 使用场景
实例方法 至少需要一个self参数 先实例化类,实例.方法名() 方法内部涉及到实例对象属性的操作
类方法 至少需要一个cls参数 类名.方法名() 或者 实例.方法名() @classmethod 需要对类属性,即静态变量进行限制性操作
静态方法 无默认参数 类名.方法名() 或者 实例.方法名() @staticmethod 与实例对象无关,但与当前类有关;实际使用方法和函数一样

在类方法内不能调用实例方法 和实例变量,可以调用其他类方法和 类变量

# 定义函数
class MethodTest:
    # 类属性
    aa = ''

    # 实例方法 可以调用类属性
    def demo_method(self):
        self.aa = '实例方法'
        print(f"这个是一个{self.aa}")

    # 类方法
    @classmethod
    def class_method(cls):
        cls.aa = '类方法'
        print(f"这个是一个{cls.aa}")

        # cls.demo_method()   # 类方法内不能调用实例方法 和 实例变量
        # cls.static_method() # 类方法内可以调用其他类方法 和 类变量

    # 静态方法 与实例对象无关
    @staticmethod
    def static_method():
        bb = '静态方法'
        print(f"这个是一个{bb}")


# 方法的调用
# 实例方法需要先实例化类,实例.方法名
p = MethodTest()
p.demo_method() # 这个是一个实例方法

# 类方法和静态方法可以直接调用,类名.方法名()
MethodTest.class_method()   # 这个是一个类方法
MethodTest.static_method()	# 这个是一个静态方法