一、类方法

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. @PropertySource配置的用法

    功能 加载指定的属性文件(*.properties)到 Spring 的 Environment 中.可以配合 @Value 和@ConfigurationProperties 使用. @Proper ...

  2. js 时间戳转换为年月日时分秒的格式

    <script type="text/javascript"> var strDate = ''; $(function(){ // 获取时间戳 var nowDate ...

  3. 关于@Autowired和@Resource注解区别

    区分一下@Autowired和@Resource两个注解的区别: 1.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 2.@A ...

  4. Linux 主从数据库

    主从数据库 主数据库的内容同步传输到附属数据库 客户访问附属数据库 这样做保证了数据库的稳定性 需要两台虚拟机 两边个虚拟机都要操作 配置hosts文件 进入/etc/hosts追加输入 192.16 ...

  5. clickhouse配置登录密码

    执行 PASSWORD=$(base64 < /dev/urandom | head -c8); echo "123456"; echo -n "123456&qu ...

  6. 【蓝桥杯】非VIP基础题型训练17题 (Python 题解)

    NO.I 基础题型 基础练习汇总 时间 题目 解析 21.12.24 早上 1. A+B问题 练习系统的适应 21.12.24 早上 2. 数组排序 输入输出排序 21.12.24 早上 3. 十六进 ...

  7. windows10下vscode+cmake编译Qt5代码

    概述 本文演示环境: windows10 cmake version:3.18 qt version: 5.14 vscode version: 1.54.1 本文演示环境基于在线模式, 离线使用VS ...

  8. 【LeetCode】364. Nested List Weight Sum II 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...

  9. 【LeetCode】374. Guess Number Higher or Lower 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 【LeetCode】561. Array Partition I 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...