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)