"""
复习前面的内容:
方法的重写:
子类继承父类,重写父类的方法,方法名必须和父类的方法名一致
重写两种:
覆盖父类的方法
对父类方法进行扩展,需要调用父类方法 使用super().父类方法名()
多继承,一个类同时继承多个父类,那么就拥有多个类的属性和方法
class 子类名(父类1,父类2,...)
pass
多态:
同时满足两个条件:1、继承关系。2、方法重写
调用同一个方法,执行出不同的结果
类属性与具体的实例无关,通过类名调用。定义的时候直接定义在class下,不要定义在__init__里(里面的是实例属性)
类方法:
1、通过装饰器@classmethod
2、第一个参数是cls,cls的理解类似于self
类方法也是直接通过类名去调用即可
"""
静态方法使用场景:
当方法体中不需要访问实例方法或者实例属性,也不需要访问类属性或者类方法时就可以定义成静态方法
静态方法由类名直接调用
静态方法:
1、方法前加修饰词 @staticmethod
2、静态方法不需要传递self或者cls参数
思考:什么情况下分别使用实例方法,类方法,静态方法?
总结:
类方法:当方法体只访问类属性的时候使用类方法
静态方法:当既不访问类属性,也不访问实例属性的时候就使用静态方法
实例方法:当访问实例属性,或者需要访问实例属性和类属性的时候就使用实例方法,实例方法中可以通过类名的方式访问类属性
"""
静态方法使用场景:
当方法体中不需要访问实例方法或者实例属性,也不需要访问类属性或者类方法时就可以定义成静态方法
静态方法由类名直接调用
静态方法:
1、方法前加修饰词 @staticmethod
2、静态方法不需要传递self或者cls参数
思考:什么情况下分别使用实例方法,类方法,静态方法?
"""
class Dog:
total_count = 0 # 类属性,用于统计实例的个数
def __init__(self,name):
self.name = name # 实例属性
Dog.total_count += 1 # 每执行一次实例化操作就表示增加了一个实例
@staticmethod
def run(): # 因为方法体里没有去访问实例属性或者类属性等,因此可以把这个方法定义成静态方法
print('狗狗喜欢跑步.....')
def info(self): # 实例方法
print(f'狗狗的名字是:{self.name}') # 访问实例属性
@classmethod
def show(cls): # 类方法
print(f'一共实现类 {cls.total_count} 只狗狗的实例') # 访问类属性
dog1 = Dog('旺财')
dog1.info() # 通过实例调用实例方法
dog2 = Dog('大黄')
dog2.info()
Dog.run() # 通过类名直接调用静态方法
Dog.show() # 通过类名直接调用类方法
运行结果: