python面向对象:静态方法的使用场景及使用方法

"""
复习前面的内容:

方法的重写:
    子类继承父类,重写父类的方法,方法名必须和父类的方法名一致
    重写两种:
        覆盖父类的方法
        对父类方法进行扩展,需要调用父类方法 使用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()  # 通过类名直接调用类方法

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值