一、类方法

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 分!

python 面向对象:类方法&静态方法的更多相关文章

  1. python 面向对象 类方法,静态方法,property

    property 内置装饰器函数 只在面向对象使用 把方法当初属性使用(方法不加参数) 例子: class Rectangle: def __init__(self,long,wide,color): ...

  2. Python面向对象之静态方法、静态方法与类方法

    静态属性: 类调用函数属性时,需要先将类实例化,再将实例作为函数属性传入:类的实例调用函数属性时需要在后面加括号. class Building: def __init__(self, name, o ...

  3. python 实例化 类方法 静态方法 成员变量 实例方法 等调用

    1.参考代码如下 # coding:utf-8 class student: # 成员变量 ok = None like = '八戒你瘦了' # 实例方法 def __init__(self): # ...

  4. Python面向对象 | 类方法 classmethod

      类方法:必须通过类的调用,而且此方法的意义:就是对类里面的变量或者方法进行修改添加. 例一个商店,店庆全场八折,代码怎么写呢? class Goods: __discount = 0.8 # 折扣 ...

  5. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  6. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  7. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  8. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  9. Python - 面向对象(二)类方法、静态方法

    面向对象的各种方法 静态方法 - @staticmethod class Person(): name = "cool guy" @staticmethod def static( ...

  10. python 浅析类方法与静态方法

    类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...

随机推荐

  1. FastDFS分布式文件系统及源码解析

    记录一次本人学习FastDFS-分布式文件系统的学习过程,希望能帮助到有需要的人. 首选得对此技术有个大概的了解,可以参考 https://www.cnblogs.com/centos2017/p/7 ...

  2. 动态规划系列(零)—— 动态规划(Dynamic Programming)总结

    动态规划三要素:重叠⼦问题.最优⼦结构.状态转移⽅程. 动态规划的三个需要明确的点就是「状态」「选择」和「base case」,对应着回溯算法中走过的「路径」,当前的「选择列表」和「结束条件」. 某种 ...

  3. MicroK8S 安装 修改IP 设置镜像加速 升级 卸载等

    系统要求: Ubuntu 20.04 LTS, 18.04 LTS or 16.04 LTS或其他支持snapd的操作系统 内存:4G+ 硬盘:20G+ 官方文档 安装microk8s sudo sn ...

  4. Hooks中的useState

    Hooks中的useState React的数据是自顶向下单向流动的,即从父组件到子组件中,组件的数据存储在props和state中,实际上在任何应用中,数据都是必不可少的,我们需要直接的改变页面上一 ...

  5. CF1036A Function Height 题解

    Content 给定一个坐标系,在它的 \(x\) 轴上有 \(2n+1\) 个点 \(P_0,P_1,P_2,...,P_{2n}\),其中对于 \(0\leqslant i\leqslant 2n ...

  6. AT1445 乱数生成 题解

    Description 有一个机器会等概率从 \(1\) 到 \(n\) 的正整数中选出一个整数.显然地,这个机器运行 \(3\) 次后会得到 \(3\) 个整数.求这 \(3\) 个整数的中位数是 ...

  7. Docker容器自动更新

    前言: Watchtower 是一个可以实现自动化更新 Docker 基础镜像与容器的实用工具.它监视正在运行的容器以及相关的镜像,当检测到reg­istry中的镜像与本地的镜像有差异时,它会拉取最新 ...

  8. layer 如何加上关闭框

    layer 如何加上关闭框

  9. PSpice基本仿真分析例程

    一.瞬态分析 二.直流分析 2.1.直流分析电路 2.2.直流分析配置 2.3.直流分析输出波形 受供电电源的限制,输出最大值为±15V. 三.交流分析 3.1.1.交流分析电路1 3.1.1.交流分 ...

  10. .Net Core 项目发布在IIS上 访问404 问题对应

    对策: 1.进入线程池画面,将当前程序的线程池设为"无托管代码"   2.修改配置文件 Web.config,加上配置   原因: 因为.NetCore 5.0 自带集成了Swag ...