首页 > 技术文章 > @staticmethod/@classmethod/实例方法/@abstractmethod

weiweivip666 2022-02-10 15:32 原文

from abc import ABCMeta, abstractmethod

# 定义一个抽象类
class Person(metaclass=ABCMeta):
    name = "泰山"
    @classmethod  # 类方法
    def walking(cls):
        print("{}在走路".format(cls.name))

    @abstractmethod  # 抽象方法
    def drinking(self):
        pass

    @staticmethod  # 静态方法
    def sleeping(name):
        print("{}在睡觉".format(name))


class Student(Person):
    # 抽象方法
    def drinking(self):
        print("{}在喝水".format(self.name))
     
    # 实例方法
    def studying(self):
        print("好好学习天天向上")


if __name__ == '__main__':
    s = Student()
    #实例化的对象可以调用类方法装饰器装饰的函数
    s.walking()

    # 实例化的对象调用抽象方法(子类要实现用装饰器装饰的抽象方法)
    s.drinking()
    
    #实例化的对象调用实例方法
    s.studying()
    
    #类不能调用实例方法
    Student.studying()
    #要想类也能调用实例方法或抽象方法,需要将实例对象传入即可
    Student.studying(s)
    Student.drinking(s)

    # 类可以调用类方法装饰器装饰的函数
    Student.walking()
    
    # 实例化的对象和类可以调用静态方法装饰器装饰的函数
    s.sleeping(s.name)
    Student.sleeping(Student.name)

推荐阅读