zoukankan      html  css  js  c++  java
  • python 面向对象:类方法&静态方法

    一、类方法

    1.1 概念和语法说明

     类方法就是针对类对象定义的方法。在类方法内部可以直接访问类属性或者调用其他的类方法

    语法如下:

    @classmethod        
    def 类方法名(cls):    
        pass

    说明:

    类方法需要修饰器 @classmethod 来标识,告诉解释器这是一个类方法。

    类方法第一个参数应是cls(class的缩写),参数也可以使用其他名称,不过习惯使用cls,作用与self类似,

    在方法内部可以使用  cls.  访问类的属性以及其他的类方法。

    1.2 代码演示

    class Tool(object):
    
        count = 0
    
        @classmethod
        def show_count(cls):
            print(F"工具对象的数量:{cls.count}")
    
        def __init__(self, name):
            self.name = name
            # 通过 类名.类属性 的方式访问类属性;
            # 也可以通过 对象.类属性 的方式访问,但是一般不建议这么做。因为如果调用前使用了赋值语句结果会变更
            Tool.count += 1
    
    
    # 创建工具对象
    tool1 = Tool("钳子")
    tool2 = Tool("扳手")
    tool3 = Tool("改刀")
    
    # 调用类方法
    Tool.show_count()

     二、静态方法

    2.1 概念和语法说明

    在开发中,如果需要在类中封装一个方法,而这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成一个静态方法。

    语法如下:

    @staticmethod
    def 静态方法名():
        pass

    说明:

    静态方法需要使用修饰器  @staticmethod 来标识,告诉解释器这是一个静态方法。

    静态方法不需要使用self 或 cls

    可以通过  类名.静态方法名  的方式调用静态方法

    2.2 代码演示

    class Person(object):
    
        @staticmethod
        def eat():
            print("喜欢吃")
    
    
    Person.eat()

     三、案例演练

    3.1 案例需求

    开发一个小游戏,需要为游戏增加游戏说明,游戏会展示游戏最高分和玩家姓名。

    分析:

    游戏说明与游戏本身没有任何关系,只是对游戏起到一个说明的功能,因此采用静态方法

    游戏分数为游戏的属性,不是玩家的属性,因此采用类方法

    玩家姓名是游戏操作对象的属性,因此采用实例方法

    3.2 代码演示

    import random
    
    
    class Game(object):
    
        # 创建类属性
        top_score = 0
        top_score_player = ""
        
        # 创建静态方法
        @staticmethod
        def game_help():
            print("这个游戏应该这样玩...")
        
        # 创建类方法
        @classmethod
        def show_top_score(cls):
            print(F"玩家:{cls.top_score_player} 获得游戏最高分 {cls.top_score} 分!")
        
        # 创建实例属性
        def __init__(self, player_name):
            self.player_name = player_name
        
        # 创建实例方法
        def play_game(self):
            print(F"玩家:{self.player_name},正在玩游戏...")
            score = random.randint(0, 100)
            print(F"游戏结束,得分:{score}")
            if score > Game.top_score:
                Game.top_score = score
                Game.top_score_player = self.player_name
    
    Game.game_help()
    zhangSan = Game("张三")
    zhangSan.play_game()
    liSi = Game("李四")
    liSi.play_game()
    Game.show_top_score()

    输出结果:

    这个游戏应该这样玩...
    玩家:张三,正在玩游戏...
    游戏结束,得分:70
    玩家:李四,正在玩游戏...
    游戏结束,得分:38
    玩家:张三 获得游戏最高分 70 分!
  • 相关阅读:
    log4net logfornet 配置和用法
    seaJs学习笔记
    docker 创建tomcat镜像
    配置alibaba的yum 源
    maven 中 jar管理
    docker 创建elasticsearch集群镜像
    springboot 常用插件
    elasticsearch插件安装之--linux下安装及head插件
    docker 创建jdk镜像
    docker 创建基础镜像
  • 原文地址:https://www.cnblogs.com/testlearn/p/11732944.html
Copyright © 2011-2022 走看看